可能重复:
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!!
可能重复:
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!!
[]
是一个快捷方式,用于创建数组而不是调用new Array()
然后填充它。这是一个类似的故事{}
。在你的例子中,你实际上是按引用而不是按值来比较。用new
操作员构建的两个对象指向内存中的不同位置,而当您使用==
操作符时,实际上是在说“这些对象是否指向内存中的相同位置?”。要按照您所期望的那样进行按值比较,您需要迭代所比较的每个数组/对象的成员,并逐个比较每个值。
有没有办法让他们平等? – PitaJ 2012-07-31 21:19:33
查看http://stackoverflow.com/questions/201183 – 2012-07-31 21:24:27
@PitaJ是的,将你的对象转换为json并进行比较。 http://jsfiddle.net/VzA55/ – 2012-07-31 21:25:59
因为[]和{}创建对象的新实例,他们是不相等的。
尝试'==='而不是'=='。 – 2012-07-31 21:16:00
@RobertHarvey为什么? '[1,[2,3]] === [1,[2,3]]'也是'false'。 – kojiro 2012-07-31 21:17:07
@RobertHarvey - 它仍然是假的 – PitaJ 2012-07-31 21:17:15