欢迎您光临自学哈网,只为分享网络知识教程,供大家学习参考!

「自学哈网」Object.assign()所实现的是深拷贝还是浅拷贝?

作者 : 自学哈 本文共632个字,预计阅读时间需要2分钟 2023-08-4 共68人阅读
也想出现在这里? 联系我们

assign()语法:

Object.assign(target, ...sources)

target:目标对象,接收源对象属性的对象,也是修改后的返回值。sources:源对象,包含将被合并的属性。下面来看例子:

let s = { a: 1 }
      let target = Object.assign({}, s)
      console.log(target) // { a: 1 }

      s.a = 2
      console.log(s) // { a: 2 }
      console.log(target) // { a: 1 }

看到这里可能有人会说,这不是层就是深拷贝吗?其实非如此

let s = { a: { b: 1 }, c: 1 }
      let target = Object.assign({}, s)
      console.log(target) // { a: { b: 1 }, c: 1 }

      s.a.b = 2
      s.c = 3
      console.log(s) // { a: { b: 2 }, c: 3 }
      console.log(target) // { a: { b: 2 }, c: 1 }

target.a.b的值随着source变化而变化,但是target.c的值并没有随着source变化

 

下面来总结开篇提到的:针对使用深拷贝,需要使用其他方法,因为

Object.assign()拷贝的是属性值,如果源对象的属性值是一个指向对象的指针,那也只拷贝那个指针。

所以如果对象的属性值为基础类型,通过Object.assign()拷贝的那个属性而言是深拷贝。

如果对象的属性值为引用类型,通过Object.assign()拷贝的那个属性而言是浅拷贝。

本站声明:
本站所有资源来源于网络,分享目的仅供大家学习和交流!如若本站内容侵犯了原著者的合法权益,可联系邮箱976157886@qq.com进行删除。
自学哈专注于免费提供最新的分享知识、网络教程、网络技术的资源分享平台,好资源不私藏,大家一起分享!

自学哈网 » 「自学哈网」Object.assign()所实现的是深拷贝还是浅拷贝?
也想出现在这里? 联系我们
© 2022 Theme by - 自学哈网 & WordPress Theme. All rights reserved 浙ICP备2022016594号