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