何时在JavaScript中使用double not(!!)运算符
我理解JavaScript中的double not操作符的作用。 我很好奇它是否有用,以及我最近提出的断言是否正确。
我说if (!!someVar)
从来没有意义也不是(!!someVar && ...
因为if
和&&
都会导致someVar被评估为布尔值,所以!!是多余的。
事实上,我唯一能想到使用double not运算符是合法的是,如果你想对另一个布尔值做一个严格的比较(所以也许在返回值中明确地预期true或false)。
它是否正确? 我开始怀疑自己,当我注意到jQuery 1.3.2同时使用if (!!someVar)
并return !!someVar && ...
在这些情况下,双打没有任何实际效果?
我个人的意见是,这只会导致混乱。 如果我看到一条if语句,我知道它正在评估它是一个布尔值。
在if
语句的上下文中,它是完全安全的,因为在内部, ToBoolean
操作将在条件表达式上执行(请参阅规范的第3步)。
但是,如果你想说,从一个函数返回一个布尔值,你应该确保结果实际上是布尔值,例如:
function isFoo () {
return 0 && true;
}
console.log(isFoo()); // will show zero
typeof isFoo() == "number";
总之,布尔逻辑运算符可以返回一个操作数 ,而不是必然的Boolean
结果:
逻辑AND运算符( &&
)将返回第二个操作数的值,如果第一个操作数是真的:
true && "foo"; // "foo"
如果它本身是虚假的,它将返回第一个操作数的值:
NaN && "anything"; // NaN
0 && "anything"; // 0
另一方面,逻辑OR运算符( ||
)将返回第二个操作数的值,如果第一个操作数是虚假的:
false || "bar"; // "bar"
如果它本身是非伪造的,它将返回第一个操作数的值:
"foo" || "anything"; // "foo"
也许值得一提的是,falsy值是: null
, undefined
, NaN
, 0
,零长度字符串,当然也是false
。
在布尔上下文中评估的任何其他内容(不是伪造的, Boolean
对象或Boolean
值)将返回true
。
是的,当你想要0 || 1返回值时,使用!! var。
一个是bool值的简单比较,当你想要“a == b”等价于“a xor not b”,除了a = 5和b = 7都是真的但不相等。
另一种情况是,当你想将一组条件强加到变量的位时:
var BIT_NONEMPTY=1;
var BIT_HASERRORS=2;
var BIT_HASCHILDREN=4;
var BIT_HASCONTENT=8;
result_bitfields =
(!!countLines())*BIT_NOTEMPTY +
(!!errorCode())*BIT_HASERRORS +
(!!firstChild())*BIT_HASCHILDREN +
(!!getContent())*BIT_HASCONTENT;
对于和位值相差很远的Javascript,它不是非常有用,但有时候可能会有用。
链接地址: http://www.djcxy.com/p/72857.html上一篇: When to use the double not (!!) operator in JavaScript
下一篇: What does the !! operator (double exclamation point) mean in JavaScript?