全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-690-7320

J*aScript中如何深拷贝对象_有哪些实现方法

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

javascript中如何深拷贝对象_有哪些实现方法

J*aScript中深拷贝对象,核心是创建一个与原对象完全独立的新对象,新对象的属性值(包括嵌套对象、数组)都不与原对象共享引用。直接赋值或浅拷贝(如Object.assign()、展开运算符{...obj})只复制第一层,深层仍共用内存地址,修改嵌套内容会影响原对象。

使用 JSON.parse(JSON.stringify()) —— 简单但有局限

这是最常用、写法最简洁的方法,适合纯数据对象(只含字符串、数字、布尔值、null、数组、普通对象):

  • ✅ 优点:一行代码搞定,无依赖,兼容性好
  • ❌ 缺点明显:
      • 会丢失函数、undefined、Symbol、Date、RegExp、Map、Set、BigInt等类型
      • 循环引用会直接报错(TypeError: Converting circular structure to JSON
      • Date 变成字符串,正则变成空对象

示例:

const obj = { a: 1, b: { c: 2 } };
const copy = JSON.parse(JSON.stringify(obj)); // ✅ 深拷贝成功

使用 structuredClone() —— 现代浏览器推荐方案

这是 ES2025 新增的标准 API,专为深拷贝设计,支持更多内置类型且能处理循环引用(部分环境):

  • ✅ 支持 Map、Set、Date、RegExp、ArrayBuffer、TypedArray、Error、Blob 等
  • ✅ 原生、安全、无需第三方库
  • ⚠️ 注意:
      • 目前不支持函数、undefined、Symbol(同 JSON 方法)
      • 循环引用在 Chrome 98+、Firefox 94+、Safari 15.4+ 支持;旧版本不支持会抛错

示例:

const obj = { date: new Date(), re: /abc/g };
const copy = structuredClone(obj); // ✅ 正确保留日期和正则

手写递归深拷贝 —— 完全可控,适合学习或特殊需求

适用于需要自定义行为(如忽略某些字段、处理函数、兼容老环境)的场景。关键逻辑是判断类型、递归处理对象/数组,其他类型直接返回:

Waifulabs Waifulabs

一键生成动漫二次元头像和插图

Waifulabs 347 查看详情 Waifulabs
  • typeofArray.isArray() 区分基本类型、数组、普通对象
  • Object.prototype.toString.call()instanceof 识别 Date、RegExp 等内置对象
  • 需用 WeakMap 记录已拷贝的对象,避免循环引用无限递归

简化版示意(不含循环引用处理):

function deepClone(obj) {
  if (obj === null || typeof obj !== 'object') return obj;
  if (obj instanceof Date) return new Date(obj);
  if (obj instanceof RegExp) return new RegExp(obj);
  const clone = Array.isArray(obj) ? [] : {};
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      clone[key] = deepClone(obj[key]);
    }
  }
  return clone;
}

借助第三方库 —— 生产环境稳妥选择

Lodash 的 _.cloneDeep() 是最成熟稳定的方案,覆盖几乎所有边界情况:

  • ✅ 支持函数、undefined、循环引用、各种内置对象、不可枚举属性
  • ✅ 经过大量测试,性能优化良好
  • ⚠️ 缺点:引入额外依赖,包体积增加(可按需导入)

示例:

import { cloneDeep } from 'lodash-es';
const copy = cloneDeep(originalObj);

基本上就这些。日常开发优先考虑 structuredClone()(兼容性满足时),老项目或需极致兼容用 Lodash;JSON 方案仅限简单数据结构;手写适合教学或定制化强的场景。

以上就是J*aScript中如何深拷贝对象_有哪些实现方法的详细内容,更多请关注其它相关文章!


# 不支持  # 梁山网络seo公司  # 模仿网站建设游戏违法吗  # 廊坊网站建设信息公示  # 整合与推广营销的关系是  # 东营电脑网站优化  # 企业网站建设用网  # 网站的推广有哪些类型  # 铜山区关键词seo排名优化  # 天津综合网络营销推广  # 丽人丽妆的营销推广要点  # 有什么不同  # 多线程  # 第三方  # 深拷贝  # 这是  # 有哪些  # 数据结构  # 运算符  # 如何实现  # 递归  # red  # safari  # 浏览器  # json  # js  # java  # javascript 


相关文章: J*a ArrayList索引越界异常:动态构建列数据的高效策略  将PCM16音频转换为W*并编码为Base64:浏览器环境下的手动处理指南  浏览器打开即用 美图秀秀网页版入口  C++的std::forward_list怎么用_C++ STL中单向链表容器的特点与应用  CSS子选择器:如何区分并样式化嵌套列表的子层级  菜鸟取件码是什么怎么查 最全查询渠道汇总  WooCommerce产品页高级定制:实现基于分类的交叉销售  拼多多视频播放卡顿如何处理 拼多多视频播放优化技巧  Node.js中HTML按钮与J*aScript函数交互的正确姿势  如何优雅地解决Livewire文件上传难题?SpatieLivewireFilepond让一切变得简单  自定义Bag-of-Words实现:处理带负号的词汇权重  在Qt QML中通过Python字典动态更新TextEdit内容的教程  优化Log4j2控制台输出性能:解决异步日志瓶颈  高德地图怎么看全景照片_高德地图全景照片浏览教程  J*aScript中高效清空DOM列表元素:解决for循环中断与任务管理问题  如何配置Composer的PSR-4自动加载_Composer自动加载命名空间映射实践教程  mysql如何分析事务日志_mysql事务日志分析方法  Django模型中自动计算可用余额的实现方法  React/Next.js中实现列表项的动态移动与状态管理:兼论唯一键的重要性  实现分段式页面滚动导航:CSS与J*aScript教程  漫蛙网页登录入口 漫蛙漫画官方授权网址  Lar*el的路由模型绑定怎么用_Lar*el Route Model Binding简化控制器逻辑  探索高级语言到C/C++的转译路径:以Go为例及内存管理策略  铁路12306的积分有效期是多久_铁路12306积分有效期说明  凉拌黄瓜怎么拌更入味 凉拌黄瓜简单家常做法  J*aScript数组对象转换:按指定键分组与值收集  大象笔记网页版入口 印象笔记网页版登录入口  Safari浏览器输入栏卡顿如何解决 Safari搜索建议与缓存清理  在WordPress中通过REST API访问受BasicAuth保护的站点内容  win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】  WooCommerce 购物车显示所有交叉销售商品教程  Python中高效且防溢出的双曲正弦计算:基于对数空间的优化策略  如何仅使用CSS更改登录界面背景图像图标的颜色  Yandex搜索引擎官网入口_俄罗斯Yandex免登录一键直达  Centos/Linux 系统下安装 composer 的完整步骤  葱吃多了会怎样 葱吃多了会伤胃吗  Linux如何构建多环境配置管理_Linux多环境配置方案  Go语言中JSON数据解析与字段访问教程  c++如何使用chrono库处理时间_c++标准库时间与日期操作  天猫2025双十一0点秒杀攻略 天猫爆款抢购时间  微信客户端如何收红包_微信客户端接收红包使用教程  AO3最新官网入口公告_2025AO3镜像站实时查询方法  126邮箱账号注册 电脑版登录入口  《明末:渊虚之羽》设计师谈设计角色:那会刚毕业 充满激情  Gmail邮箱申请注册直达_Gmail邮箱免费注册PC版官网入口2025  在J*a中如何隐藏复杂性_使用门面模式组织对象交互  在Go语言中利用后缀数组处理多字符串:实现高效文本匹配与自动补全  c++中的std::forward_list和std::list有什么不同_c++ forward_list与list区别分析  Mac怎么查看崩溃日志_Mac控制台错误报告分析  AO3最新镜像入口 Archive of Our Own官方平台访问 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。