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