浅拷贝只复制第一层属性,新旧对象共享嵌套引用;深拷贝递归复制所有层级,完全独立。常用浅拷贝有展开运算符、Object.assign()、slice()/concat();深拷贝推荐structuredClone,其次jsON法,特殊需求可手写递归函数。

javaScript中浅拷贝只复制对象的第一层属性,新旧对象共享嵌套的引用;深拷贝则递归复制所有层级,新对象与原对象完全独立。
浅拷贝的常见方式
适用于只有一层结构的对象或数组,修改嵌套内容会影响原对象。
- 展开运算符(…):如
const newObj = {...oldObj}或const newArr = [...oldArr] - Object.assign():如
const newObj = Object.assign({}, oldObj) - Array.prototype.slice() / concat():仅对数组有效,如
arr.slice()
深拷贝的实用方法
需要完整隔离嵌套结构时使用,注意性能和特殊值限制。
- json.parse(JSON.stringify()):简单快捷,但不支持函数、undefined、symbol、date、regexp、循环引用等
- structuredClone():现代浏览器支持(chrome 98+、firefox 94+),能处理 map、Set、Date、RegExp 等,但不支持函数和 window 对象
- 手写递归函数:可控性强,可定制忽略属性、处理循环引用、兼容特殊类型
什么时候该用哪种?
多数场景下优先用 structuredClone(如有兼容性要求再降级);若只操作简单数据且需兼容老环境,JSON 方法够用;频繁操作或有特殊需求(如过滤字段、处理 BigInt),建议封装自定义深拷贝函数。
立即学习“Java免费学习笔记(深入)”;
基本上就这些,不复杂但容易忽略嵌套影响和边界情况。