我遇到了以下问题,无法掌握原因,谁能解释一下?
var foo = [0];
console.log(foo == !foo); // true
console.log(foo == foo); // true
发布于 2012-10-06 04:35:18
第二个比较很容易解释:foo
等于它自己。
然而,第一个有点棘手:foo
是一个数组,它是一个对象,当为coerced to boolean时,它的计算结果为true
。所以!foo
就是false
。但是,比较左侧的foo
并没有转换为布尔值。在相等比较期间,这两个操作数实际上都被转换为数字。它是这样评估的:
[0] == false
[0] == 0
"0" == 0
0 == 0
true
根据MDN,关于与相等运算符==
的比较
如果两个操作数不是同一类型,JavaScript将转换这两个操作数,然后应用严格比较。如果操作数是数字或布尔值,则操作数将被转换为数字(如果可能
我知道这个解释听起来很肤浅。它实际上比这复杂得多,但基本步骤是我上面列出的步骤。您可以查看有关ECMA-262规范的详细信息,特别是在9和11.9部分。
发布于 2012-10-06 04:41:02
你应该使用"===“和"!==”而不是"==“和"!=”这里有更多解释:Which equals operator (== vs ===) should be used in JavaScript comparisons?
http://net.tutsplus.com/tutorials/javascript-ajax/the-10-javascript-mistakes-youre-making/
https://stackoverflow.com/questions/12753646
复制相似问题