什么是“===!”操作员呢?

时间:2014-01-07 19:09:32

标签: javascript operators

我正在玩一些JavaScript并发现一些奇怪的东西。

此代码警告“false”但不提供语法错误。有人可以解释为什么在!!!之后添加一个甚至多个===没有导致任何错误?

var i = void 0;
var b = i ===! void 0  ? "true" : "false";
alert(b);//display false but no syntax errors..

3 个答案:

答案 0 :(得分:11)

空白意味着什么,所以

var b = (i === (!void 0))  ? "true" : "false";

var b = (i === true) ? "true" : "false";

MDN Operator Precedence

答案 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