所以问题是两个相同的对象在JavaScript中不相同,让我们说:
Object() == Object()
甚至:
[{a: 1}, {a: 2}].indexOf({a: 1}); //returns -1 not found
这种奇怪行为的原因是什么?
答案 0 :(得分:8)
通过引用比较对象。只有当两个引用指向同一个对象时,它们才相等。
答案 1 :(得分:2)
对象是引用,当您比较两个引用时,它们将返回false。
other answer(由Eamon Nerbonne提供)这里有一个非常相关的观点:
时,对象被认为是等效的
- 它们与
===
完全相同(首先打开字符串和数字以确保42
等同于Number(42)
)- 或者它们都是日期并具有相同的
valueOf()
- 或者它们都是相同类型而不是null并且......
- 它们不是对象,每
==
相等(捕获数字/字符串/布尔值)- 或者,忽略具有
undefined
值的属性,它们具有相同的属性,所有这些属性都被认为是递归等效的。
答案 2 :(得分:1)
同样适用于阵列
([] === []) //returns false
NaN也是一个特殊的价值,它永远不会与自己相等。
NaN === NaN //False