如何解决javascript 赋值运算符 (`=`) 与 Object.assign
根据我阅读 MDN doc 的理解,Object.assign
在 Object.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 举报,一经查实,本站将立刻删除。