为了获取测试数据,我想将对象推入一个数组:
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的对象。有人能解释这个结果吗?
为了获取测试数据,我想将对象推入一个数组:
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的对象。有人能解释这个结果吗?
1条答案
按热度按时间xam8gpfp1#
在JavaScript中,对象总是通过引用传递。因此,根据您的代码,您正在分配一个指向对象的相同地址的新值,这导致将新值分配给同一对象,而不是创建该对象的副本。
为了使它工作,你可以在每次将
obj
推入对象时创建一个obj
的副本。只需将对象初始化移动到循环内,它就会工作。现场演示**:**