根据我从阅读MDN文档中了解到的情况,Object.assign
在Object.assign(target, source)
中将提供的源复制到目标,或在Object.assign({}, source)
中创建一个新对象。
在第二种情况(var newObj = Object.assign({}, source)
(中,这与var newObj = source
有何不同?
唯一的区别是Object.assign
只复制可枚举的自身属性,而=
复制所有属性吗?
谢谢
根据引用进行思考。
当您执行var newObj = source
时,newObj
并不是真正的"新对象",而是对source
的引用。。。如果更改source.a
,那么newObj.a
现在也是新值,因为它们本质上是同一对象的两个标签。
相反,对于var newObj = Object.assign({}, source);
,它实际上是一个新的对象{}
,已经分配了其属性,并且实际上是source
的浅克隆。如果随后更改source.a
,那么newObj.a
仍然是它的旧值,因为它是一个完全不同的对象。请记住,这是一个浅克隆。因此,如果source.b
是对象{ x: 'blah'}
,并且您更改了source.b.x
,那么newObject.b.x
也将更改,因为虽然source !== newObj
为true,但它们都包含对同一子属性对象b
的引用。