为什么a [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);
答案 0 :(得分:3)
因为您正在将对象x
的引用推送到数组a
,而不是该对象的副本。
修改x[str]
的值后,指向更新对象的[0]引用。
因此,在您的代码a[0]
中,a[1]
和x
指向同一个对象。如果您希望在特定代码执行时添加x
对象的副本,则必须克隆对象x
并将克隆推送到数组中。
所以问题How do I correctly clone a JavaScript object?将帮助你克隆js对象。另请参阅文章"JavaScript: Passing by Value or by Reference"以更好地了解javascript中的变量传递。
祝你好运!
答案 1 :(得分:1)
为什么a [0] .nil的值为400
因为x
仍然指向您尚未更改的旧引用(您只更改了其中的属性值)。
如何将其设置为200
之前
x[str] = 400;
添加此行
x = {}; //x = new Object();
答案 2 :(得分: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);