当我修改克隆的 obj(使用 ...)时,为啥 obj 会发生突变?
Posted
技术标签:
【中文标题】当我修改克隆的 obj(使用 ...)时,为啥 obj 会发生突变?【英文标题】:Why the obj is being mutated when I am modifying the cloned obj ( using ...)?当我修改克隆的 obj(使用 ...)时,为什么 obj 会发生突变? 【发布时间】:2018-01-01 11:07:49 【问题描述】:让我们取一个对象 d。
var d =
"e":
"f": 3
现在使用 ... 将 d
复制到 t
并分配新属性。
var t = ...d
t.e._f = 4
为什么对象 d 被变异为
"e": Object
"_f": 4,
"f": 3
【问题讨论】:
【参考方案1】:你正在做浅拷贝。 ...d
等价于 Object.assign(, d)
,后者依次复制 1 级深的属性。 Docs.
对于深度克隆,我们需要使用其他替代方法,因为 Object.assign() 复制属性值。如果源值是 引用一个对象,它只复制该引用值。
所以t.e === d.e
引用同一个对象。
【讨论】:
以上是关于当我修改克隆的 obj(使用 ...)时,为啥 obj 会发生突变?的主要内容,如果未能解决你的问题,请参考以下文章
为啥当我的查询有 Where 时 SQL Server 有更多的 I/O?
当我尝试使用 MVVM WPF 中的命令修改对象时,为啥在视图模型中出现空错误?
在深度克隆对象时,Typescript Error 2345