我正在玩一些JavaScript并发现一些奇怪的东西。
此代码警告“false”但不提供语法错误。有人可以解释为什么在!!!
之后添加一个甚至多个===
没有导致任何错误?
var i = void 0;
var b = i ===! void 0 ? "true" : "false";
alert(b);//display false but no syntax errors..
答案 0 :(得分:11)
空白意味着什么,所以
var b = (i === (!void 0)) ? "true" : "false";
是
var b = (i === true) ? "true" : "false";
答案 1 :(得分:5)
!
只是一个否定,与大多数其他运算符不同,它是右关联的,所以它只会否定它前面的任何内容
这基本上等同于
var b = i ===(!void 0) ? "true" : "false";
所以基本上,你可以在你想要的东西前面有尽可能多的!
,并且它不会产生任何影响,所以!!!!!!!!!!!!!false
会评估为真,因为它是与!(!(!(!(!(!(!(!(!(!(!(!(!false))))))))))))
答案 2 :(得分:2)
请参阅此表,这可能有助于解释:
!0 // true
!!0 // false
!!!!!!0 // false, showing that !s are simply prefixes
! 0 // true, showing whitespace is irrelevant
0 === !0 // false
0 ===! 0 // false
0 ===!!! 0 // false