可能重复:
How do you determine equality for two JavaScript objects?
为什么[1,[2,3]] == [1,[2,3]]
评估为假?
此外,为什么会发生这种情况:
var g = { a:1, b:2, c:3 };
g == { a:1, b:2, c:3 }; // false!!
答案 0 :(得分:3)
因为[]和{}创建了对象的新实例,并且它们不相等。
答案 1 :(得分:3)
[]
是创建数组文字的快捷方式,而不是调用new Array()
然后填充它。这是{}
的类似故事。在您的示例中,您实际上是通过引用而不是按值进行比较。使用new
运算符构造的两个对象指向内存中的不同位置,当您使用==
运算符时,实际上是在说“这些对象是否指向内存中的相同位置?”。要像你期望的那样进行按值比较,你需要迭代你正在比较的每个数组/对象的成员,并逐个比较每个值。