深拷贝与浅拷贝

深拷贝与浅拷贝

深拷贝

对象的深拷贝是指其属性与其拷贝的源对象的属性不共享相同的引用

点击查看MDN官网解释

即深拷贝是值的拷贝,拷贝后的对象与源对象完全独立,互不影响

浅拷贝

对象的浅拷贝是其属性与其拷贝的源对象的属性共享引用 --MDN

点击查看MDN官网解释

即深拷贝是值的地址的拷贝(针对引用类型),拷贝后的对象与源对象会相互影响
浅拷贝:展开语法(...操作符)、数组的一些API(concatslicefrom)、对象的一些API(assigncreate

浅拷贝与直接赋值的区别

直接赋值:
当你直接赋值一个对象或数组时,你实际上是在复制这个对象的引用,而不是对象本身。这意味着原始对象和新对象将指向内存中的同一个位置。因此,对任何一个对象的修改都会影响到另一个对象。
浅拷贝:
浅拷贝则是创建一个新对象,并复制原始对象的所有非静态属性到新对象,同时将这些属性指向原始对象中的相同位置(即复制的是引用,而不是实际的对象)。因此,如果原始对象中的属性值是一个引用类型(如对象或数组),那么新对象和原始对象将共享这个引用。

总结:
直接赋值:复制的是对象的引用,原始对象和新对象指向同一个内存位置。
浅拷贝:创建一个新对象,并复制原始对象的所有非静态属性到新对象。如果属性值是引用类型,则新对象和原始对象将共享这个引用
例如:

// 直接赋值
const orging1 = {
  a: 1,
  b: {
    c: 2
  }
}
const tar1 = orging1
tar1.a = 2 // orging.a = 2
tar1.b.c = 3 // orging.b.c = 3
// 浅拷贝
const orging2 = {
  a: 1,
  b: {
    c: 2
  }
}

const tar2 = Object.assign({}, orging2)
tar2.a = 2 // orging.a = 1
tar2.b.c = 3 // orging.b.c = 3

作者:my-wl

出处:https://www.cnblogs.com/my-wl/p/18047028

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   梦羽微澜  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示