我理解what the double not operator does in JavaScript.我很好奇它的使用,以及我最近做出的断言是否正确.
我说如果(!! someVar)从来没有意义也没有(!! someVar&& …因为if和&&都会导致someVar被评估为布尔值所以!!是多余的.
事实上,我唯一能想到使用double not运算符是合法的,如果你想对另一个布尔值进行严格的比较(那么可能在返回值中明确要求true或false).
它是否正确?当我注意到jQuery 1.3.2同时使用if(!! someVar)和return !! someVar&& ;;时,我开始怀疑自己. …
双重在这些情况下没有任何实际效果吗?
我个人认为,这只是导致混乱.如果我看到if语句,我知道它将它作为布尔值进行评估.
解决方法:
在if
statements的上下文中我和你在一起,它是完全安全的,因为在内部,ToBoolean操作将在条件表达式上执行(参见规范中的步骤3).
但是,如果你想,从函数返回一个布尔值,你应该确保结果实际上是布尔值,例如:
function isFoo () {
return 0 && true;
}
console.log(isFoo()); // will show zero
typeof isFoo() == "number";
总之,Boolean Logical Operators可以返回一个操作数,而不是必然的布尔结果:
如果第一个操作数是真的,则逻辑AND运算符(&&)将返回第二个操作数的值:
true && "foo"; // "foo"
并且它将返回第一个操作数的值,如果它本身是假的:
NaN && "anything"; // NaN
0 && "anything"; // 0
另一方面,逻辑OR运算符(||)将返回第二个操作数的值,如果第一个操作数是假的:
false || "bar"; // "bar"
并且它将返回第一个操作数的值,如果它本身是非虚假的:
"foo" || "anything"; // "foo"
也许值得一提的是,虚假的值是:null,undefined,NaN,0,零长度字符串,当然还有false.
在boolean context中评估的任何其他内容(不是虚假,布尔对象或布尔值)将返回true.