当我修改克隆的obj(使用{...})时,为什么obj会发生变异?

问题描述:

让我们拿一个物体d。当我修改克隆的obj(使用{...})时,为什么obj会发生变异?

var d = { 
    "e":{ 
    "f": 3 
    } 
} 

现在复制dt与{...}和分配新的道具。

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引用同一个对象。