2012-07-31 95 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

因爲[]和{}創建對象的新實例,他們是不相等的。