Javascript数组等于零但不是自身

时间:2016-12-28 11:11:48

标签: javascript arrays

我一直在使用JavaScript中的数组,但无法弄清楚为什么会发生这种情况:

console.log(0 == 0)
//true

console.log([] == 0)
//true

console.log(0 == [])
//true

console.log([] == [])
//false

console.log([] == ![])
// true

空数组等于左右都为零,但为什么它不等于它自己?

我意识到比较两个对象不会产生true,但如果将它们与{{1}进行比较,为什么它们会被强制转换为0(或者是伪造的,不应该是这种情况)如果将它们与另一个数组进行比较,则作为对象进行威胁?

3 个答案:

答案 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