当我修改克隆的obj(使用{...})时,为什么obj会发生变异?
问题描述:
让我们拿一个物体d。当我修改克隆的obj(使用{...})时,为什么obj会发生变异?
var d = {
"e":{
"f": 3
}
}
现在复制d
到t
与{...}和分配新的道具。
var t = {...d}
t.e._f = 4
为什么对象d被突变为
{
"e": Object {
"_f": 4,
"f": 3
}
}
答
你正在做的浅拷贝。 {...d}
相当于Object.assign({}, d)
,后者依次复制属性一个级别的深度。 Docs。
对于深克隆,我们需要使用其他的替代品,因为 Object.assign()副本的属性值。如果源值是对对象的 引用,则它只复制该引用值。
因此t.e === d.e
引用同一个对象。