浅拷贝只复制第一层引用,基本类型拷贝值,引用类型拷贝地址;深拷贝递归复制所有层级,确保完全独立。常用方法:浅拷贝有展开运算符、Object.assign等;深拷贝有JSON法(有局限)、structuredClone(现代推荐)、手写递归、lodash.cloneDeep(兼容性强)。

浅拷贝创建一个新对象,把原对象第一层的属性值复制过去。如果属性是基本类型(如字符串、数字),拷贝的是值;如果是引用类型(如对象、数组),拷贝的是内存地址——新旧对象仍共享同一份深层数据。
常用实现方式:
const newObj = {...oldObj},适用于对象;const newArr = [...oldArr],适用于数组Object.assign({}, oldObj),注意第一个参数必须是空对象,否则会修改目标对象arr.slice() 或 [].concat(arr)
⚠️ 坑:所有浅拷贝方法都无法处理嵌套对象。例如 const a = {x: {y: 1}}; const b = {...a}; b.x.y = 2,此时 a.x.y 也会变成 2。
深拷贝会递归遍历原对象,为每一层的引用类型都新建内存空间,确保新旧对象完全独立,互不影响。
立即学习“Java免费学习笔记(深入)”;
常用实现方式:
undefined、function、Symbol、Date、RegExp、Map、Set、循环引用,且会丢失原型链和不可枚举属性Map、Set、Date、RegExp、ArrayBuffer 等),也支持循环引用,但暂不支持 function 和 undefined
深拷贝不是“一招鲜”,不同场景要选对方法:
JSON 方式前务必确认数据纯 JSON 可序列化,否则静默失败或丢数据JSON.stringify() 会直接报错,structuredClone 和 _.cloneDeep 才能安全处理structuredClone 在 Node.js 17+ 和主流浏览器中可用,但服务端环境(如旧版 Node)可能不支持日常开发可按优先级选择:
Object.assign(浅拷贝)structuredClone
lodash.cloneDeep
Immer),写起来更自然,底层自动处理深拷贝逻辑不复杂但容易忽略。
以上就是javascript的深拷贝与浅拷贝如何实现_有哪些常用方法和坑的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号