4

我遇到以下情况,无法理解原因,谁能解释一下?

var foo = [0];
console.log(foo == !foo); // true 
console.log(foo == foo);  // true
4

2 回答 2

6

第二个比较很容易解释:foo等于自身。

然而,第一个有点棘手:foo它是一个数组,它是一个对象,true被强制为 boolean时,它的计算结果为。!foo也是如此false。但是foo左侧的比较没有被转换为布尔值。在相等比较期间,两个操作数实际上都转换为数字。这是它的评估方式:

[0] == false
[0] == 0
"0" == 0
0 == 0
true

根据MDN,与相等运算符的比较==

如果两个操作数的类型不同,JavaScript 会转换操作数,然后应用严格比较。如果任一操作数是数字或布尔值,则尽可能将操作数转换为数字

我知道这个解释听起来很肤浅。它实际上比这要复杂得多,但基本步骤是我上面列出的那些。您可以查看 ECMA-262 规范的详细信息,尤其是第9节和第11.9节。

于 2012-10-05T20:35:17.920 回答
-1

您应该使用 "===" 和 "!==" 而不是 "==" 和 "!=" 更多解释: JavaScript 比较中应该使用哪个等号运算符 (== vs ===)?

http://net.tutsplus.com/tutorials/javascript-ajax/the-10-javascript-mistakes-youre-making/

于 2012-10-05T20:41:02.430 回答