You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

for循环中向数组推入对象结果不符合预期,请求解析原因

问题原因解释

你这段代码的核心问题是只创建了一个对象实例:

  • var obj = {}是在循环外部定义的,整个循环过程中,所有操作都是针对同一个对象。
  • JavaScript里对象属于引用类型,变量obj存储的不是对象本身,而是它在内存中的地址。每次执行obj["var"] = i,都是修改这个地址指向的对象的属性值;而arr.push(obj)只是把这个地址存入数组,数组里的10个元素其实都是指向同一个对象的引用。

循环结束时,最后一次赋值把obj["var"]设为9,数组里所有元素指向的都是这个最终状态的对象,所以打印出来全是{var: 9}。

修正方案

把对象的创建放到循环内部,每次循环生成新的对象实例:

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

或者更简洁的写法,直接用对象字面量创建:

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

内容的提问来源于stack exchange,提问作者hex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:57:03