我了解doublenot运算符在JavaScript中的作用。我很好奇它的用法,以及我最近的断言是否正确,我对此很好奇。
我说这if (!!someVar)既没有意义,也不是(!!someVar && ...因为if和&&都将someVar评估为布尔值,所以!! 是多余的。
if (!!someVar)
(!!someVar && ...
if
&&
实际上,我唯一想到使用double not运算符是合法的,是如果您想与另一个布尔值进行严格比较(因此可能返回的值显式地期望为true或false)。
它是否正确?当我注意到jQuery 1.3.2同时使用if (!!someVar)和时,我开始怀疑自己。return !!someVar && ...
return !!someVar && ...
在这种情况下,double是否没有任何实际作用?
我个人认为这只会导致混乱。如果看到if语句,则知道它正在将其评估为布尔值。
在我与您在一起的if陈述的上下文中,这是完全安全的,因为在内部,该ToBoolean操作将在条件表达式上执行( 请参阅规范的第3步 )。
ToBoolean
但是,如果要从函数返回布尔值,则应确保结果实际上是布尔值,例如:
function isFoo () { return 0 && true; } console.log(isFoo()); // will show zero typeof isFoo() == "number";
总之,布尔逻辑运算符可以返回操作数 ,而不一定返回Boolean结果:
Boolean
如果第一个 操作数 是 真实的&&,则逻辑AND运算符()将返回 第二个操作数 的值: __
true && "foo"; // "foo"
如果它本身是 falsy ,它将返回 第一个操作数 的值: __
NaN && "anything"; // NaN 0 && "anything"; // 0
另一方面,如果第一个 操作数 为 falsy ,则逻辑OR运算符(||)将返回 第二个操作数 的值: __
||
false || "bar"; // "bar"
如果它本身不是伪造的,它将返回 第一个操作数 的值:
"foo" || "anything"; // "foo"
也许这是值得一提的是, falsy 值是:null,undefined,NaN,0,零长度字符串,当然false。
null
undefined
NaN
0
false
在 布尔上下文中 评估的任何其他内容(不是 虚假的,Boolean对象或Boolean值)都将返回。 __true
true