JavaScript深拷贝需创建完全独立的新对象,常用方法有:JSON.parse(JSON.stringify())(限制多)、structuredClone()(现代推荐)、手写递归(灵活可控)、Lodash的_.cloneDeep()(生产稳妥)。

JavaScript 中实现深拷贝,核心是创建一个与原对象完全独立的新对象,所有嵌套层级的属性都复制一份,修改新对象不会影响原对象。最直接的方式不是简单赋值或 Object.assign,因为它们只做浅拷贝。
JSON.parse(JSON.stringify()) —— 快速但限制多
这是最常被用到的“一行深拷贝”写法,适合纯数据对象(仅含字符串、数字、布尔、null、数组、普通对象):
const original = { a: 1, b: [2, 3], c: { d: 4 } };
const copy = JSON.parse(JSON.stringify(original));登录后复制
⚠️ 常见陷阱:
- 函数、undefined、Symbol 类型会被忽略或丢失
- Date、RegExp、Map、Set、BigInt 等内置对象会变成空对象或报错
- 循环引用(对象内部引用自身)直接抛出异常
- 原型链和 constructor 信息全部丢失
structuredClone() —— 现代浏览器推荐方案
ES2022 引入的原生 API,支持更多类型,且能处理循环引用:
立即学习“Java免费学习笔记(深入)”;
const copy = structuredClone(original);
登录后复制
✅ 支持:Date、RegExp、ArrayBuffer、TypedArray、Map、Set、Blob、File、ImageData,以及循环引用。
❌ 不支持:函数、undefined、Symbol、Promise、window 对象等非可序列化值。
注意:Node.js 从 v17.0 开始支持,但需启用 --experimental-structured-cloning;v18.15+ 默认开启。浏览器兼容性需查 CanIUse(Chrome 98+、Firefox 94+、Safari 15.4+)。
标签: javascript java js node.js json node npm 浏览器 工具 safari win r
还木有评论哦,快来抢沙发吧~