我一直在使用JavaScript中的数组,但无法弄清楚为什么会发生这种情况:
console.log(0 == 0)
//true
console.log([] == 0)
//true
console.log(0 == [])
//true
console.log([] == [])
//false
console.log([] == ![])
// true
空数组等于左右都为零,但为什么它不等于它自己?
我意识到比较两个对象不会产生true
,但如果将它们与{{1}进行比较,为什么它们会被强制转换为0
(或者是伪造的,不应该是这种情况)如果将它们与另一个数组进行比较,则作为对象进行威胁?
答案 0 :(得分:9)
console.log(0 == [])
//true
您正在尝试将对象与整数进行比较,因此您的对象被隐式地类型化为等效的整数值0
console.log([] == [])
//false
因为两个对象永远不会相等
答案 1 :(得分:2)
console.log([] == [])
那将比较array1和array2是否是内存中的相同数组对象,这不是你想要的。
为了做你想做的事,你需要检查两个数组是否具有相同的长度,并且每个索引中的每个成员是相同的。
console.log([].length == [].length)
// true
答案 2 :(得分:1)
这个问题是用对象引用和类型转换的知识来处理的。首先,在javascript中,对象值是通过引用存储的。所以我们可以告诉它与[]和[]不同,因为这两个数组对应第二,' =='对于左右都是一个不严格的操作,[]和0都转换为false
。