让我们拿一个对象 d。
var d = {
"e":{
"f": 3
}
}
现在用 {...} 复制d
到t
并分配新的道具。
var t = {...d}
t.e._f = 4
为什么对象 d 被突变为
{
"e": Object {
"_f": 4,
"f": 3
}
}
让我们拿一个对象 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)
which 依次将属性复制一层深。文档。
对于深度克隆,我们需要使用其他替代方法,因为 Object.assign() 会复制属性值。如果源值是对对象的引用,则它只复制该引用值。
所以t.e === d.e
引用同一个对象。