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