2012-07-31 75 views
0

可能重复:
How do you determine equality for two JavaScript objects?为什么[1,[2,3] = [1,[2,3]]

为什么[1,[2,3]] == [1,[2,3]]评估为假的?

另外,为什么会出现这种情况:

var g = { a:1, b:2, c:3 }; 
g == { a:1, b:2, c:3 }; // false!! 
+0

尝试'==='而不是'=='。 – 2012-07-31 21:16:00

+0

@RobertHarvey为什么? '[1,[2,3]] === [1,[2,3]]'也是'false'。 – kojiro 2012-07-31 21:17:07

+0

@RobertHarvey - 它仍然是假的 – PitaJ 2012-07-31 21:17:15

回答

3

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

+0

有没有办法让他们平等? – PitaJ 2012-07-31 21:19:33

+0

查看http://stackoverflow.com/questions/201183 – 2012-07-31 21:24:27

+0

@PitaJ是的,将你的对象转换为json并进行比较。 http://jsfiddle.net/VzA55/ – 2012-07-31 21:25:59

3

因为[]和{}创建对象的新实例,他们是不相等的。