【发布时间】:2012-06-05 12:40:09
【问题描述】:
这些陈述的评估结果为真有什么原因吗?
0 == [0];
1 == [1];
5 == [5];
5000 == [5000];
1000000 == [1000000];
所以基本上任何数字都等于包裹在数组中的自身?这背后的逻辑是什么?
【问题讨论】:
标签: javascript numbers
这些陈述的评估结果为真有什么原因吗?
0 == [0];
1 == [1];
5 == [5];
5000 == [5000];
1000000 == [1000000];
所以基本上任何数字都等于包裹在数组中的自身?这背后的逻辑是什么?
【问题讨论】:
标签: javascript numbers
这是因为 non-strict equality operator 在这种情况下将其两个操作数都强制转换为字符串,而数组的字符串表示形式是它包含的元素,用逗号分隔:
>>> [1, 5].toString()
"1,5"
由于您问题中的数组仅包含一个元素,因此它们的字符串表示形式与其元素的相同:
>>> [5000].toString()
"5000"
【讨论】:
因为==不比较变量的类型,而===是比较变量的类型,所以:
0 == [0] //true
0 === [0] // false
同样的情况:
0 == '0' //true
0 === '0' //false
【讨论】:
[0] 是一个包含一个元素“0”的数组。所以0 == [0] 相当于做:
0 == myArray(0) 用另一种语言。其中myArray(0) returns the value at the index 0,在本例中为 0。
这就是我对 JavaScript 数组的理解。如果我错了,其他人可能想跳进去纠正我。
【讨论】:
这背后的一个原因是使用的运算符是“==”,它只比较比较值而不是数据类型,因为 1=="1" 是真的。
【讨论】: