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中如何深拷贝对象_有哪些实现方法的详细内容,更多请关注其它相关文章!


# javascript  # java  # 深拷贝  # 山西做网站推广  # seo稿件发什么网站  # 广东江门个人网站建设  # 复混肥新品营销推广  # 机关档案用户网站建设  # 定制行业营销推广报价策略  # 茶山全网推广营销中心电话  # 公众号seo规则  # 丹东seo软件哪家好用  # 揭阳新网站怎么优化排名  # 有什么不同  # 多线程  # 第三方  # 不支持  # 这是  # 有哪些  # 数据结构  # 运算符  # 如何实现  # 递归  # red  # safari  # 浏览器  # json  # js 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 处理含命名空间的XML文件 Power Query中的高级技巧  漫蛙官网(首页入口)_漫蛙漫画稳定访问教程分享  快手极速版在线体验区 快手极速版网页体验入口  DeepSeek超全面指南:入门必看  腾讯QQ邮箱官方入口 QQ邮箱网页版登录平台  使用document.execCommand实现Web文本编辑器加粗/取消加粗  小米手机屏幕失灵乱跳怎么办 屏幕触控问题自检与临时解决方法【应急】  QQ网页版入口导航 QQ网页版在线访问通道  todesk如何添加信任设备_todesk信任设备设置教程  TikTok搜索结果不显示怎么办 TikTok搜索刷新与优化方法  抖音评论无法发送如何修复 抖音评论功能操作指南  餐馆菜篮选购指南  《花瓣》创建专辑方法  PDF如何批量加注释_PDF多文件批注高亮操作教程  CSS过渡与滚动滚动事件结合应用_scroll与transition动画  Animex动漫社社登录官网 Animex动漫社资源社入口直达  Apple Music无故扣费引质疑  WooCommerce购物车:强制显示所有交叉销售商品教程  猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法  《新三国志曹操传》游历事件袁尚突围攻略  微信客户端如何找回密码_微信客户端忘记密码找回方法  Leaflet地图弹出窗口图片动态显示:避免缺失图标的专业指南  天堂漫画网页版在线阅读 天堂漫画手机版入口  Eclipse开发J*a快速入门  CSS布局中意外顶部空白的调试与解决:深入理解padding-top  QQ邮箱官方登录页_腾讯出品安全稳定的邮箱服务  知乎APP怎么查看自己被邀请的问题_知乎APP邀请回答记录查看与参与方法  电子白板帮助菜单使用指南  哔哩哔哩黑名单怎么查看  Python中深度嵌套字典与列表的数据提取与条件过滤指南  如何自定义苹果手机铃声  PHP页面重载后变量状态保持:实现用户档案连续浏览的教程  荣耀Magic6 Pro拍照成像偏暗_荣耀Magic6 Pro夜景优化  Excel如何制作月度销售统计图_Excel动态图表制作与控件应用  汽水音乐车机版官网5.0 汽水音乐车机版5.0版本下载入口  Go语言中方法接收器的选择:值类型还是指针类型?  微博网页版入口链接 微博网页版在线互动平台  易车网官网直达入口 易车网在线登录入口  Excel如何快速合并单元格内容_Excel文本合并与函数操作技巧  c++如何掌握指针的核心用法_c++指针入门到精通指南  《撕歌》会员开通方法  windows10怎么设置电源按钮_windows10按下电源键功能修改  byrutor直接访问入口 byrutor官方游戏库  C++ bind函数使用教程_C++参数绑定与函数适配器的应用  学习通网页版个人登录_学习通网页版个人账户登录入口  动漫岛汉化官网网 动漫岛官方动漫汉化地址  t3出行如何使用微信支付  macosmonterey系统外接显示器驱动怎么安装_macosmonterey外接显示器驱动与分辨率调整  抖音团长模式怎么做?团长模式是什么意思?  Animex动漫社正版在线入口 Animex动漫社动漫官方观看网 

 2025-12-16

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.