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



让我们取一个对象d。

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),后者反过来将属性复制到一级深度。文档。

对于深度克隆,我们需要使用其他替代方案,因为 Object.assign(( 复制属性值。如果源值为 引用对象时,它仅复制该引用值。

所以t.e === d.e引用同一个对象。

最新更新