javascript赋值运算符(`=`)与Object.assign



根据我从阅读MDN文档中了解到的情况,Object.assignObject.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的引用。

最新更新