JavaScript深拷贝需递归遍历创建新结构,无万能方法:JSON方式最简但限制多;structuredClone为现代推荐方案;手写递归可定制且解循环引用;Lodash的cloneDeep最全面可靠。

JavaScript 实现深拷贝的核心是**递归遍历对象或数组的每一层属性,创建全新结构,避免引用共享**。没有单一“万能”方法,需根据数据类型、环境支持和特殊需求选择合适方案。
JSON.parse(JSON.stringify()) —— 简单但限制多
适合纯数据对象(仅含字符串、数字、布尔值、null、数组、普通对象),不支持函数、undefined、Symbol、Date、RegExp、Map、Set、循环引用等。
- ✅ 用法最简单:
const copy = JSON.parse(JSON.stringify(obj)) - ❌ 会丢失函数、undefined 属性;Date 变成字符串;正则变空对象;NaN 变 null
- ⚠️ 遇到循环引用直接报错
TypeError: Converting circular structure to JSON
结构化克隆(structuredClone)—— 现代浏览器推荐方案
ES2022 引入的原生 API,支持大多数内置类型(Date、RegExp、Map、Set、ArrayBuffer、TypedArray、Blob、File、URL 等),也支持循环引用,且不执行 getter/setter。
- ✅ 安全、高效、语义清晰:
const copy = structuredClone(obj) - ✅ 浏览器兼容性良好(Chrome 98+、Firefox 94+、Safari 15.4+),Node.js 17.0+(需启用 --harmony-structured-clone)
- ❌ 不支持函数、undefined、Symbol(同 JSON 方式);不能克隆带有私有字段的类实例(如 #field)
手写递归深拷贝 —— 灵活可控,适配定制需求
适用于需要处理特殊类型(如函数、正则、自定义类)、兼容老环境,或需跳过某些字段、控制克隆逻辑的场景。
标签: javascript java js node.js json node 浏览器 工具 safari red
还木有评论哦,快来抢沙发吧~