为什么[1,[2,3]]!= [1,[2,3]]

时间:2012-07-31 21:14:35

标签: javascript logic

  

可能重复:
  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!! 

2 个答案:

答案 0 :(得分:3)

因为[]和{}创建了对象的新实例,并且它们不相等。

答案 1 :(得分:3)

[]是创建数组文字的快捷方式,而不是调用new Array()然后填充它。这是{}的类似故事。在您的示例中,您实际上是通过引用而不是按值进行比较。使用new运算符构造的两个对象指向内存中的不同位置,当您使用==运算符时,实际上是在说“这些对象是否指向内存中的相同位置?”。要像你期望的那样进行按值比较,你需要迭代你正在比较的每个数组/对象的成员,并逐个比较每个值。