Javascript 对象分配更新原始源
今天,我和redux一起工作 当我使用Object.assign创建副本时,它使用的对象没有内部数组,效果很好 但当我不得不处理这样一个物体时:Javascript 对象分配更新原始源,javascript,ecmascript-6,clone,Javascript,Ecmascript 6,Clone,今天,我和redux一起工作 当我使用Object.assign创建副本时,它使用的对象没有内部数组,效果很好 但当我不得不处理这样一个物体时: { ID:'2', NAME:'GENERAL', FIELDS:[ { ID:'1', NAME:'M2' } ] } ,Object assign将创建一个副本,但我在副本中所做的更改也发生在原始副本中 我必须使用lod
{
ID:'2',
NAME:'GENERAL',
FIELDS:[
{
ID:'1',
NAME:'M2'
}
]
}
,Object assign将创建一个副本,但我在副本中所做的更改也发生在原始副本中
我必须使用lodash cloneDeep
有人知道为什么会发生这种行为吗?因为Object.assign不是克隆或深度复制,它只是复制其他对象属性的引用。因此,当您有字符串或数字之类的原语时,它们由数组复制,或者对象由引用传输对象值是JavaScript中的引用。例如,“FIELDS”属性的值是对数组的引用。将该对象的属性复制到另一个对象时,“字段”属性值(引用)将被复制,因此现在两个对象的属性都引用同一个数组。这就是为什么
cloneDeep
存在的原因。根据我的经验,很少需要深层对象副本。并不是所有的副本都被引用,id/name arenthanks,用于澄清@Pointy。现在我得到了它可能的副本