1

为什么这些陈述评估为真的有理由吗?

0 == [0];
1 == [1];
5 == [5];
5000 == [5000];
1000000 == [1000000];

所以基本上任何数字都等于包裹在一个数组中?这背后的逻辑是什么?

4

4 回答 4

6

这是因为在这种情况下,非严格相等运算符将其操作数强制转换为字符串,而数组的字符串表示形式是它包含的元素,由逗号分隔:

>>> [1, 5].toString()
"1,5"

由于您问题中的数组仅包含一个元素,因此它们的字符串表示形式与其元素的相同:

>>> [5000].toString()
"5000"
于 2012-05-31T09:11:05.050 回答
1

[0]是一个包含一个元素“0”的数组。所以0 == [0]相当于做:

0 == myArray(0)用另一种语言。其中myArray(0) returns the value at the index 0,在这种情况下为 0。

这就是我对 JavaScript 数组的理解。如果我错了,其他人可能想跳进去纠正我。

于 2012-05-31T09:12:15.283 回答
1

因为 == 不比较变量的类型,而 === 比较变量的类型,所以:

0 == [0]  //true
0 === [0] // false

在同样的情况下:

0 == '0'  //true
0 === '0' //false
于 2012-05-31T09:15:47.913 回答
0

这背后的一个原因是使用的运算符是“==”,它只比较比较值而不是数据类型,因为 1=="1" 是真的。

于 2012-05-31T09:11:49.173 回答