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

JavaScript中for循环为何只返回最后一个值而非所有值?

循环中对象引用导致的数组结果异常

先看你写的代码:

function test(){
    const obj = {}
    const arr = []

    for(let i = 0; i < 100; i++) {
        obj.i = i
        arr.push(obj)
    }

    return arr
} 

const res = test();
console.log(res);

为什么返回的是100个{"i":99}?核心原因是JavaScript里的对象是引用类型:

  • 你在循环外只创建了一个obj对象,所有循环操作的都是这个对象的引用
  • 每次循环里的obj.i = i只是修改这个唯一对象的i属性值
  • arr.push(obj)并没有把对象本身放进数组,而是把这个对象的内存地址(引用)存进了数组

所以数组里的100个元素其实全是指向同一个对象的引用,当循环结束时,这个对象的i属性已经被最后一次循环的99覆盖,打印数组时自然所有元素看起来都是{"i":99}。

如果要得到预期的结果,只需要把obj的创建放到循环内部,让每次循环都生成一个新的独立对象:

function test(){
    const arr = []

    for(let i = 0; i < 100; i++) {
        const obj = {}
        obj.i = i
        arr.push(obj)
    }

    return arr
} 

const res = test();
console.log(res);

内容的提问来源于stack exchange,提问作者KARTHIKEYAN.A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:22:01