微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决javascript 赋值运算符 (`=`) 与 Object.assign

根据我阅读 MDN doc 的理解,Object.assignObject.assign(target,source) 中复制提供给目标的源或在 Object.assign({},source) 中创建一个新对象。

在第二种情况 (var newObj = Object.assign({},source)) 中,这与 var newObj = source 有何不同?

唯一的区别是 Object.assign 只复制可枚举的自身属性,而 = 复制所有属性吗?

谢谢

解决方法

从参考文献的角度考虑。

当您执行 var newObj = source 时,newObj 并不是真正的“新对象”,而是对 source引用...如果您更改 { {1}} 然后 source.a 现在也是那个新值,因为它们本质上是同一个对象的 2 个标签。

相反,对于 newObj.a 那么它实际上是一个新对象 var newObj = Object.assign({},source);,它已经分配了其属性,并且实际上是 {} 的浅层克隆。如果您随后更改了 source,那么 source.a 仍然是它的旧值,因为它是一个完全不同的对象。请记住,这是一个浅层克隆。因此,如果 newObj.a 是一个对象 source.b 并且您更改 { x: 'blah'} - 那么 source.b.x 也会更改,因为虽然 newObject.b.x 为真,但它们都包含对相同的子属性对象 source !== newObj

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。