javascript 将对象推入for循环中的数组:意外结果

wztqucjr  于 2023-04-19  发布在  Java
关注(0)|答案(1)|浏览(129)

为了获取测试数据,我想将对象推入一个数组:

var arr = [];
var obj = {};
for (i = 0; i < 10; i++) {
obj["var"] = i;
arr.push(obj);
};
console.log(arr);

The result (running in node.js) gives:
我得到一个由10个相同对象组成的数组{var:9}而我期望得到10个数字为0到9的对象。有人能解释这个结果吗?

xam8gpfp

xam8gpfp1#

在JavaScript中,对象总是通过引用传递。因此,根据您的代码,您正在分配一个指向对象的相同地址的新值,这导致将新值分配给同一对象,而不是创建该对象的副本。
为了使它工作,你可以在每次将obj推入对象时创建一个obj的副本。只需将对象初始化移动到循环内,它就会工作。
现场演示**:**

var arr = [];

for (i = 0; i < 10; i++) {
  var obj = {};
  obj["var"] = i;
  arr.push(obj);
}

console.log(arr);

相关问题