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

为何赋值JS对象能修改原对象属性,赋值对象属性却不行?

为什么两种赋值后的修改结果不同?

先看你给出的代码:

let a = {
    a1: 1,
    a2: 1,
    a3: 1
}
let b = a
b.a3 = 2
console.log(a) // { a1: 1, a2: 1, a3: 2 }

let d = a.a3
d = 3
console.log(a) // { a1: 1, a2: 1, a3: 2 }

差异的核心原因是JS中引用类型和基本类型的赋值机制完全不同:

  • 对象的引用赋值(第一种情况)
    JS里的对象属于引用类型,当你执行let b = a时,并没有复制整个对象给b,而是把a指向该对象的内存地址(引用)复制给了b。此时a和b指向的是内存中同一个对象实例,所以通过b修改对象的属性,本质上是在修改这个共享的对象,自然会同步反映到a上。

  • 基本类型的值赋值(第二种情况)
    a.a3是数字类型,属于基本类型(包括Number、String、Boolean、Null、Undefined、Symbol、BigInt)。基本类型的赋值是值的复制,执行let d = a.a3时,会把a.a3的当前值(1)复制一份给d,d和a.a3是两个独立存储的数值。后续修改d的值,只是改变了d自己存储的内容,和a.a3没有任何关联,所以a的属性不会变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:30:48