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

JavaScript引用类型特性疑问:为何修改对象后数组元素同步变化?

为什么修改person对象后,list[0].ID也会变成3?

这事儿的核心在于JavaScript里对象是按引用传递的,不是按值复制的,我给你一步步拆解代码的执行逻辑你就懂了:

  1. 首先var person = {}; 创建了一个空对象,但你要知道,person这个变量本身不是这个对象,它只是一个「指向这个对象在内存中位置的引用」。
  2. 接下来给person.name和person.surname赋值,其实都是通过这个引用,去修改内存里那个真实的对象。
  3. 当你执行list[0] = person;的时候,你并没有把整个person对象复制一份放进数组里——你只是把person手里的那个「对象引用」存到了list的第0位。这时候,person和list[0]就像两把钥匙,打开的是同一个保险柜(也就是内存里的那个对象)。
  4. 然后你执行person.ID = 3;,本质是用person这把钥匙打开保险柜,给里面加了一个叫ID的东西,值是3。
  5. 最后console.log(list[0].ID),就是用list[0]这把钥匙打开同一个保险柜,自然能看到刚加的ID,值就是3。

为了让你更明白,我举个基本类型的对比例子,你就能看出区别:

let num = 1;
let arr = [];
arr[0] = num;
num = 2;
console.log(arr[0]); // 输出1,因为基本类型是按值传递,赋值时复制了一份

简单总结:JS里对象(包括数组、函数)都是引用类型,赋值时传递的是对象的内存地址,不是对象本身。所以多个变量/数组项指向同一个对象时,修改其中一个,其他所有指向这个对象的引用都会看到变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:40:47