2016-05-17 138 views
4

爲什麼[0] .nil的值是400我應該怎麼做才能將其設置爲200。感謝您的回答如何將多個對象添加到一個數組

a = new Array(); 
x = new Object(); 
str = "nil"; 

x[str] = 200; 

a.push(x); 

x[str] = 400; 

a.push(x); 

alert("1 = "+ a[0].nil); 
alert("2 = "+ a[1].nil); 

回答

1

爲什麼[0] .nil的值是400

因爲x仍然指向舊的參考,你沒有改變(裏面只有你的屬性更改值)。

我應該怎麼做將其設置爲200

只要之前

x[str] = 400; 

加入這一行

x = {}; //x = new Object(); 
+0

非常感謝。這是工作 –

+0

@AhmadBudiU很高興幫助。接受並讚揚已幫助你的答案。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – gurvinder372

3

因爲你是推參考對象x到數組a,而不是該對象的副本。

修改x[str]的值後,指向更新對象的[0]引用。

因此在您的代碼a[0],a[1]x指向相同的對象。如果您希望在特定的代碼執行時間添加x對象副本,則必須克隆對象x並將克隆推入數組。

SO問題How do I correctly clone a JavaScript object?將幫助您克隆js對象。另請參閱文章"JavaScript: Passing by Value or by Reference"以更好地瞭解JavaScript中傳遞的變量。

祝你好運!

+0

如何解決呢? –

+0

@AhmadBudiU更新回答 –

0

你應該clone object,與Object.assing

Object.assign()方法用於將所有可枚舉自身屬性的值從一個或多個源對象複製到目標對象。它會返回目標對象。

a = new Array(); 
 
x = new Object(); 
 
str = "nil"; 
 

 
x[str] = 200; 
 

 
a.push(Object.assign({}, x)); 
 

 
x[str] = 400; 
 

 
a.push(Object.assign({}, x)); 
 

 
document.write("1 = "+ a[0].nil); 
 
document.write("2 = "+ a[1].nil);