JavaScript深拷贝核心是创建完全独立的新对象,避免引用共享;常用方法包括JSON.parse(JSON.stringify())(简洁但有类型限制)、structuredClone()(现代标准,支持多类型)、手写递归(可控但复杂)和Lodash的cloneDeep()(全面稳妥)。

JavaScript中深拷贝对象,核心是创建一个与原对象完全独立的新对象,新对象的属性值(包括嵌套对象、数组)都不与原对象共享引用。直接赋值或浅拷贝(如Object.assign()、展开运算符{...obj})只复制第一层,深层仍共用内存地址,修改嵌套内容会影响原对象。
这是最常用、写法最简洁的方法,适合纯数据对象(只含字符串、数字、布尔值、null、数组、普通对象):
TypeError: Converting circular structure to JSON)示例:
const obj = { a: 1, b: { c: 2 } };这是 ES2022 新增的标准 API,专为深拷贝设计,支持更多内置类型且能处理循环引用(部分环境):
示例:
const obj = { date: new Date(), re: /abc/g };适用于需要自定义行为(如忽略某些字段、处理函数、兼容老环境)的场景。关键逻辑是判断类型、递归处理对象/数组,其他类型直接返回:
typeof 和 Array.isArray() 区分基本类型、数组、普通对象Object.prototype.toString.call() 或 instanceof 识别 Date、RegExp 等内置对象简化版示意(不含循环引用处理):
function deepClone(obj) {Lodash 的 _.cloneDeep() 是最成熟稳定的方案,覆盖几乎所有边界情况:
示例:
import { cloneDeep } from 'lodash-es';基本上就这些。日常开发优先考虑 structuredClone()(兼容性满足时),老项目或需极致兼容用 Lodash;JSON 方案仅限简单数据结构;手写适合教学或定制化强的场景。
以上就是JavaScript中如何深拷贝对象_有哪些实现方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号