When to use the double not (!!) operator in JavaScript
我理解double not操作符在javascript中的作用。我很好奇它的用途,以及我最近的一个断言是否正确。
我说
事实上,我唯一能想到的合法使用double not运算符的时间是,如果您想与另一个布尔值进行严格的比较(因此,可能是在返回值中显式地期望true或false)。
这是正确的吗?当我注意到jquery 1.3.2同时使用
在这种情况下,double是否没有任何实际效果?
我个人认为这只会导致混乱。如果我看到一个if语句,我知道它正在将其作为布尔值进行计算。
在我和您一起使用的
但是,如果您想从函数返回一个布尔值,您应该确保结果实际上是布尔值,例如:
1 2 3 4 5 6 | function isFoo () { return 0 && true; } console.log(isFoo()); // will show zero typeof isFoo() =="number"; |
总之,布尔逻辑运算符可以返回操作数,而不必返回
逻辑与运算符(
1 | true &&"foo"; //"foo" |
如果第一个操作数本身错误,它将返回第一个操作数的值:
1 2 | NaN &&"anything"; // NaN 0 &&"anything"; // 0 |
另一方面,如果第一个操作数错误,逻辑或运算符(
1 | false ||"bar"; //"bar" |
如果第一个操作数本身没有错误,它将返回第一个操作数的值:
1 | "foo" ||"anything"; //"foo" |
也许值得一提的是,错误的值是:
在布尔上下文中评估的任何其他(不是falsy、
是的!!var用于需要0_1返回值的情况。
一个是对bool值的简单比较,当您希望"a==b"等于"a xor not b"时,除了a=5和b=7都是真的,但不等于。
另一种是当您想要将一组条件强制为变量的位时:
1 2 3 4 5 6 7 8 9 10 | 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中不是很有用,它离位值非常远,但有时可能有用。