2013-01-23 92 views
10

可能重複:
How do I correctly clone a JavaScript object?JavaScript對象推到一個數組

我有這樣的代碼:

var temp = []; 
var obj = {name:"1"}; 
temp.push(obj); 
obj.name = "2"; 
temp.push(obj); 

我很期待是真實的:

temp[0].name == "1" && temp[1].name == "2"; 

居然會發生什麼:

temp[0].name == "2" && temp[1].name == "2"; 

爲什麼會發生這種情況,我怎麼能得到什麼,我期待?

+0

...這是http://stackoverflow.com/questions/14417645/javascript-object-cloning/14417676#14417676的解決方案 –

回答

8

JavaScript數組持有對對象的引用,而不是對象本身。當你將一個對象插入數組中時,它不會創建一個新對象,但它只是將對該對象的引用(obj也指向該對象)引入數組中。

所以最後obj,temp [0]和temp 1都指向同一個對象。要實際創建一個全新的對象,可以使用Object.create()或jQuery.extend({},obj)。雖然在你的情況下很容易,只是創建一個新的簡單對象,使用var newobj = {name="2"}

4

JavaScript對象通過引用傳遞。在你的情況下,你只有一個對象「obj」,並且temp [0]和temp [1]指向同一個對象。

0

obj作爲一個對象被添加引用在數組中,所以你實際上增加了兩次相同的obj

相關問題