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

JavaScript 实现深拷贝的核心是**递归遍历对象或数组的每一层属性,创建全新结构,避免引用共享**。没有单一“万能”方法,需根据数据类型、环境支持和特殊需求选择合适方案。
适合纯数据对象(仅含字符串、数字、布尔值、null、数组、普通对象),不支持函数、undefined、Symbol、Date、RegExp、Map、Set、循环引用等。
const copy = JSON.parse(JSON.stringify(obj))
TypeError: Converting circular structure to JSON
ES2022 引入的原生 API,支持大多数内置类型(Date、RegExp、Map、Set、ArrayBuffer、TypedArray、Blob、File、URL 等),也支持循环引用,且不执行 getter/setter。
const copy = structuredClone(obj)
适用于需要处理特殊类型(如函数、正则、自定义类)、兼容老环境,或需跳过某些字段、控制克隆逻辑的场景。
立即学习“Java免费学习笔记(深入)”;
function deepClone(obj, map = new WeakMap()) {
if (obj === null || typeof obj !== 'object') return obj;
if (map.has(obj)) return map.get(obj);
const copy = Array.isArray(obj) ? [] : {};
map.set(obj, copy);
for (const key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
copy[key] = deepClone(obj[key], map);
}
}
return copy;
}
经过大量测试的成熟工具函数,覆盖几乎所有边界情况(函数、Date、RegExp、Map、Set、TypedArray、循环引用、不可枚举属性等)。
const copy = _.cloneDeep(obj)
以上就是javascript如何实现深拷贝_有哪些方法可以复制复杂对象的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号