JavaScript中无原生深度克隆方法,常用方案有:JSON.parse(JSON.stringify())(简单但局限多)、structuredClone()(现代环境首选,支持循环引用及多种内置类型)、递归手写(完全可控)、lodash.cloneDeep()(生产环境稳定可靠)。

JavaScript 中没有直接的“深度克隆”原生方法,但有多种方式实现对象的完全独立副本。关键在于区分浅拷贝和深拷贝——浅拷贝只复制第一层属性引用,而深拷贝会递归复制所有嵌套层级,确保新对象与原对象彻底隔离。
JSON.parse(JSON.stringify()) —— 简单但有局限
这是最常用的“伪深拷贝”写法,适合纯数据对象(仅含字符串、数字、布尔值、null、数组、普通对象):
- ✅ 快速、一行搞定:
const clone = JSON.parse(JSON.stringify(obj)) - ❌ 不支持函数、undefined、Symbol、Date、RegExp、Map、Set、BigInt,会丢失或报错
- ❌ 循环引用会直接抛出
TypeError - ❌ Date 对象变成字符串,正则变成空对象
structuredClone() —— 新标准、推荐首选(现代环境)
浏览器(Chrome 98+、Firefox 94+、Edge 98+)和 Node.js 17.0+(需启用 --experimental-structured-clone,Node.js 18.12+ 默认支持)已原生支持:
- ✅ 支持 Map、Set、Date、RegExp、ArrayBuffer、TypedArray、Error、DOM 节点(部分环境)
- ✅ 自动处理循环引用
- ❌ 仍不支持函数、undefined、Symbol(这些会被忽略或抛错,取决于环境)
- ✅ 用法极简:
const clone = structuredClone(obj)
递归手写深拷贝 —— 完全可控,适合学习或特殊需求
适合需要自定义行为(如跳过某些字段、转换类型、处理特殊构造器)的场景:
标签: javascript java js node.js json node 浏览器 edge 作用域 red
还木有评论哦,快来抢沙发吧~