2016-04-13 27 views
0

只是試圖瞭解爲什麼發生這種情況。Javascript對象和數組參考行爲不同深度的深度

我正在試驗一下javascript數組,對象和對象的引用。然後我達到了一個我不瞭解的地步。

我創建了一個包含對象的數組;那麼當我對該對象進行引用並更改屬性時;原稿和參考的值會自動更改。顯然是因爲它是一個參考,而不是一個副本。

當我創建一個包含一個對象的數組和另一個對象時,我期待的是相同的,但在某些情況下,原始對象保持不變。

可能它有一個非常簡單的解釋,我現在不知道。有人可以解釋我嗎?

謝謝!

var foo = [ 
 
    { 
 
    "bar": "bar" 
 
    } 
 
]; 
 

 
var ref = foo[0]; 
 
ref.bar = "new bar"; 
 

 
console.info(foo[0].bar);    // output: new bar 
 
console.info(ref.bar);     // output: new bar 
 
console.info(foo[0].bar === ref.bar); // output: true 
 

 
var foo2 = [ 
 
    { 
 
    "bar2": [ 
 
     { "nested": "nested" } 
 
    ] 
 
    } 
 
]; 
 

 
var ref2 = foo2[0].bar2; 
 
ref2.nested = "nested 2"; 
 

 
console.info(foo2[0].bar2[0].nested);     // output: nested 
 
console.info(ref2.nested);        // output: nested 2 
 
console.info(foo2[0].bar2[0].nested === ref2.nested); // output: false

回答

0

一切都很好。什麼也沒有變。你理解得很好。 這只是你把foo2 [0] .bar2 in var ref2

var ref2 = foo2[0].bar2; 

看到foo2的[0] .bar2陣列這裏。當你做了

*ref2.nested = "nested 2";* 

它增加了一個新對象REF2。 你想要做的是

*var ref2 = foo2[0].bar2[0];* 

或其他任何微妙的東西。 Javascript是同一個朋友。只是我們失去了參考。

+0

謝謝!真的很傻...哈哈哈 – ius