关于深浅拷贝方式的总结

深拷贝和浅拷贝的概念

针对引用类型而言,浅拷贝指的是复制对象的引用,即直接给引用类型赋值,如果拷贝后的对象发生变化,原对象也会发生变化。而深拷贝是真正地对对象进行拷贝,修改拷贝后的新对象并不会对原对象产生任何影响。

实现的几种方式

不完全深拷贝

  • Object.assign()
  • 拓展运算符 ...

以上两种都是只对对象的首层进行深拷贝,也就是说,当对象中只有一级属性,没有二级属性时,此方法为深拷贝,但是对象中有对象,在二级属性以后就是浅拷贝。(参照下图)

深拷贝

  • JSON.stringify 和 JSON.parse

    不足之处:对目标对象有要求——无法拷贝属性值为 function 或 undefined

  • jquery 库 $.extend(true, target, [obj1])
  • lodash 工具库的 cloneDeep 方法
  • 递归
//p 为被拷贝对象,c为目标对象
function deepCopy(p, c) {
  let target = c || {}

  for (let i in p) {
    if (typeof p[i] === 'object') {
      c[i] = p[i].constructor === Array ? [] : {}
      deepCopy(p[i], c[i])
    } else {
      c[i] = p[i]
    }
  }

  return target
}

小结:若对象的属性无引用类型,则可用Object.assign()和...进行深拷贝;否则,则使用lodash的cloneDeep方法或直接使用递归。

posted @   EzenLee  阅读(295)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示