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

为何JavaScript对象值发生改变?求解释输出变为20,2而非1,2的原因

为什么修改y.a后,x.a的值变成了20?

这是个典型的JavaScript引用类型问题,我来给你掰扯清楚核心原因:

JavaScript里的对象属于引用类型,变量存储的不是对象本身,而是对象在内存中的地址(相当于一把“访问钥匙”)。咱们一步步拆解你的代码逻辑:

  • 第一步:var x = { a: 1, b: 2 };
    这行在内存中创建了一个实体对象{ a:1, b:2 },变量x保存的是这个对象的内存地址——相当于拿到了打开这个对象的钥匙。

  • 第二步:var y = x;
    这里并没有复制出一个全新的对象,只是把x手里的那把“钥匙”复制给了y。现在x和y指向的是内存里同一个对象,就像两个人拿着同一扇房间的钥匙,打开门看到的是同一个空间。

  • 第三步:y.a = 20;
    你通过y这把钥匙找到对应的对象,修改了它的a属性值。因为x和y共享同一个对象,所以当你用x访问a属性时,看到的自然是修改后的20;而b属性没被改动,所以还是原来的2。

如果想让x和y各自拥有独立的对象,你需要手动复制对象,比如用这两种方法:

// 方法1:使用Object.assign创建浅拷贝
var y = Object.assign({}, x);
// 方法2:使用展开运算符创建浅拷贝
var y = {...x};

这样修改y.a就不会影响x.a了,因为它们现在指向内存里两个完全独立的对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:36:17