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

时间:2017-07-26 08:39:35

标签: javascript ecmascript-6 babel mutation spread-syntax

让我们拿一个物品d。

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

现在使用{...}将d复制到t并分配新道具。

var t = {...d}
t.e._f = 4

为什么对象d被变异为

{
  "e": Object {
    "_f": 4,
    "f": 3
  }
}

1 个答案:

答案 0 :(得分:2)

你正在做浅拷贝。 {...d}相当于Object.assign({}, d),后者又会将属性一个级别深度复制。 Docs

  

对于深度克隆,我们需要使用其他替代方法,因为   Object.assign()复制属性值。如果源值是a   引用一个对象,它只复制该引用值。

所以t.e === d.e引用相同的对象。