Javascript 对象分配更新原始源

Javascript 对象分配更新原始源,javascript,ecmascript-6,clone,Javascript,Ecmascript 6,Clone,今天,我和redux一起工作 当我使用Object.assign创建副本时,它使用的对象没有内部数组,效果很好 但当我不得不处理这样一个物体时: { ID:'2', NAME:'GENERAL', FIELDS:[ { ID:'1', NAME:'M2' } ] } ,Object assign将创建一个副本,但我在副本中所做的更改也发生在原始副本中 我必须使用lod

今天,我和redux一起工作

当我使用Object.assign创建副本时,它使用的对象没有内部数组,效果很好

但当我不得不处理这样一个物体时:

{
      ID:'2',
      NAME:'GENERAL',
      FIELDS:[
        {
          ID:'1',
          NAME:'M2'
        }
      ]
    }
,Object assign将创建一个副本,但我在副本中所做的更改也发生在原始副本中

我必须使用lodash cloneDeep


有人知道为什么会发生这种行为吗?

因为Object.assign不是克隆或深度复制,它只是复制其他对象属性的引用。因此,当您有字符串或数字之类的原语时,它们由数组复制,或者对象由引用传输对象值是JavaScript中的引用。例如,“FIELDS”属性的值是对数组的引用。将该对象的属性复制到另一个对象时,“字段”属性值(引用)将被复制,因此现在两个对象的属性都引用同一个数组。这就是为什么
cloneDeep
存在的原因。根据我的经验,很少需要深层对象副本。并不是所有的副本都被引用,id/name arenthanks,用于澄清@Pointy。现在我得到了它可能的副本