因此,我正在测试此代码的小安全性:
<script>
var newData = {}, graphs = []
for(var j=0; j<2; j++){
newData["name"] = 'value '+ j
console.log(newData["name"]);
graphs.push(newData);
console.log(graphs);
}
</script>
Run Code Online (Sandbox Code Playgroud)
我在网络控制台中获得了以下输出:
value 0
Array [ Object ]
value 1
Array [ Object, Object ]
Run Code Online (Sandbox Code Playgroud)
数组中的所有对象具有完全相同的值:
name:"value 1"
Run Code Online (Sandbox Code Playgroud)
我真的为此感到挣扎,因为我不更改任何值,并且名称仍在同一循环中更改。
预先感谢您的回答!
在javascript中将对象放入数组意味着您要在数组中放置对该对象的引用,而不是该对象的值。在您的示例中,您创建了一个对象,newData然后在循环中更改了该对象的name属性。这意味着在循环结束时,您将剩下一个newData带有{'name': 'value 2'}
当您查看时graphs[0],它将告诉您它包含对newData 的引用,看起来像{'name': 'value 2'}。同样适用于graphs[1]
您可以通过每次在数组中创建一个新对象来解决此问题,如下所示:
graphs = []
for(var j=0; j<2; j++){
var newData = {}
newData["name"] = 'value '+ j
console.log(newData["name"]);
graphs.push(newData);
console.log(graphs);
}
Run Code Online (Sandbox Code Playgroud)