Oll*_*rds 50 javascript boolean-logic bitwise-operators
-1 == true; //false
-1 == false //false
-1 ? true : false; //true
Run Code Online (Sandbox Code Playgroud)
谁能解释一下上面的输出?我知道我可以通过比较0来解决这个问题,但我很感兴趣.我希望至少有一个草率的equals语句是真实的,因为它们进行了隐式类型转换,我当然没想到三元组会得出完全不同的结果.
And*_*y E 65
在前两种情况下,布尔值被转换为数字 - 1表示true,0表示false.在最后一种情况下,它是一个转换为布尔值的数字,除0和NaN之外的任何数字都将转换为true.所以你的测试用例真的更像这样:
-1 == 1; // false
-1 == 0; // false
true ? true : false; // true
Run Code Online (Sandbox Code Playgroud)
任何不是0或1的数字都是如此.
有关更多详细信息,请阅读ECMAScript文档.从第3版[PDF],第11.9.3节摘要等式比较算法:
19.如果Type(y)是布尔值,则返回比较结果x == ToNumber(y).
值得给出完整的算法读取,因为其他类型可能导致更糟糕的陷阱.