关于深浅拷贝方式的总结
深拷贝和浅拷贝的概念
针对引用类型而言,浅拷贝指的是复制对象的引用,即直接给引用类型赋值,如果拷贝后的对象发生变化,原对象也会发生变化。而深拷贝是真正地对对象进行拷贝,修改拷贝后的新对象并不会对原对象产生任何影响。
实现的几种方式
不完全深拷贝
- 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
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南