可能的重复:
是什么 !! JavaScript 中的(不是 not)运算符?
是什么意思啊!! JavaScript 中的运算符(双感叹号)是什么意思?
所以我正在调试一些代码并遇到了这个:
var foo.bar = 0; // this is actually passed from another function, adding it for context
function(foo) {
var someVar = !!foo.bar;
if (foo.bar) {
// ..stuff happens
} else {
// .. something else happens
}
}
好吧,我的问题是什么?!!
?所做的一切就是使0 === false
.
与相比,使用它有什么好处吗?boolean(foo.bar)
?
foo.bar 可以在 if 中进行计算,因为0 === false
已经这样了,那为什么要进行转换呢? (someVar 没有在其他地方重用)
这会将值转换为布尔值并且确保布尔类型.
"foo" // Evaluates to "foo".
!"foo" // Evaluates to false.
!!"foo" // Evaluates to true.
If foo.bar
如果通过了,那么它可能不是 0,而是其他一些假值。请参阅下面的真值表:
JavaScript 真值表
'' == '0' // false
0 == '' // true
0 == '0' // true
false == 'false' // false
false == '0' // true
false == undefined // false
false == null // false
null == undefined // true
" \t\r\n" == 0 // true
资料来源:道格·克罗克福德
当涉及到 NaN 值时,Javascript 也变得非常奇怪。这是我能立即想到的唯一情况!与 === 的行为不同。
NaN === NaN //false
!!NaN === !!NaN //true
// !!NaN is false
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)