2016-05-17 132 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);

相关问题