深拷贝与浅拷贝
深拷贝与浅拷贝
深拷贝
对象的深拷贝是指其属性与其拷贝的源对象的属性不共享相同的引用
即深拷贝是值的拷贝,拷贝后的对象与源对象完全独立,互不影响
浅拷贝
对象的浅拷贝是其属性与其拷贝的源对象的属性共享引用 --MDN
即深拷贝是值的地址的拷贝(针对引用类型),拷贝后的对象与源对象会相互影响
浅拷贝:展开语法(...
操作符)、数组的一些API(concat
、slice
、from
)、对象的一些API(assign
、create
)
浅拷贝与直接赋值的区别
直接赋值:
当你直接赋值一个对象或数组时,你实际上是在复制这个对象的引用,而不是对象本身。这意味着原始对象和新对象将指向内存中的同一个位置。因此,对任何一个对象的修改都会影响到另一个对象。
浅拷贝:
浅拷贝则是创建一个新对象,并复制原始对象的所有非静态属性到新对象,同时将这些属性指向原始对象中的相同位置(即复制的是引用,而不是实际的对象)。因此,如果原始对象中的属性值是一个引用类型(如对象或数组),那么新对象和原始对象将共享这个引用。
总结:
直接赋值:复制的是对象的引用,原始对象和新对象指向同一个内存位置。
浅拷贝:创建一个新对象,并复制原始对象的所有非静态属性到新对象。如果属性值是引用类型,则新对象和原始对象将共享这个引用
例如:
// 直接赋值
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)