新闻中心

JS对象如何克隆_J*aScript对象浅克隆与深克隆实现方法与区别

2025-11-12
浏览次数:
返回列表
浅克隆只复制第一层属性,嵌套对象仍共享引用,修改会影响原对象;深克隆递归复制所有层级,完全隔离。常用方法:扩展运算符和Object.assign实现浅克隆;JSON.parse(JSON.stringify())、structuredClone或递归实现深克隆。选择依据:数据结构简单且无特殊类型可用JSON方法;现代项目推荐structuredClone;仅需第一层独立用扩展运算符;复杂场景可自定义递归克隆。

js对象如何克隆_javascript对象浅克隆与深克隆实现方法与区别

J*aScript中克隆对象是一个常见需求,尤其是在需要保留原始数据状态的场景下。根据是否复制嵌套对象的引用或值,克隆分为浅克隆和深克隆,两者实现方式和效果有明显区别。

浅克隆:只复制第一层属性

浅克隆会创建一个新对象,并将原对象的可枚举属性复制到新对象中,但如果属性是对象或数组,复制的是引用而非新对象。这意味着修改嵌套对象会影响原始对象。

常见的浅克隆方法包括:

  • Object.assign():适用于单层对象
  • 扩展运算符(...):语法简洁,使用广泛
示例: ```js const obj = { a: 1, b: { c: 2 } }; const clone = { ...obj }; clone.b.c = 3; console.log(obj.b.c); // 输出 3,原对象被影响 ```

深克隆:递归复制所有层级

深克隆会完全复制对象及其所有嵌套对象,生成一个与原对象无任何引用关联的新对象。修改克隆后的对象不会影响原始对象。

Tanka Tanka

具备AI长期记忆的下一代团队协作沟通工具

Tanka 146 查看详情 Tanka

实现深克隆的方法有多种,各有优缺点:

  • JSON.parse(JSON.stringify()):简单快捷,但有局限性(如无法处理函数、undefined、Symbol、循环引用)
  • 递归实现:灵活可控,可处理复杂类型
  • 结构化克隆 API(structuredClone):现代浏览器支持,原生支持多数类型
示例(JSON 方法): ```js const obj = { a: 1, b: { c: 2 } }; const deepClone = JSON.parse(JSON.stringify(obj)); deepClone.b.c = 3; console.log(obj.b.c); // 输出 2,原对象未受影响 ``` 示例(structuredClone): ```js const obj = { a: 1, b: { c: 2 } }; const deepClone = structuredClone(obj); deepClone.b.c = 3; console.log(obj.b.c); // 输出 2 ```

如何选择克隆方式?

实际开发中应根据数据结构和需求选择合适的方式:

  • 数据简单且不含函数、undefined 等特殊值时,JSON 方法足够用
  • 需要兼容旧环境或自定义逻辑时,可用递归函数实现深克隆
  • 现代项目可直接使用structuredClone,安全高效
  • 仅需第一层独立时,使用扩展运算符或 Object.assign即可

基本上就这些,理解引用机制是掌握克隆的关键。

以上就是JS对象如何克隆_J*aScript对象浅克隆与深克隆实现方法与区别的详细内容,更多请关注其它相关文章!


# 自定义  # 汕头seo排名去哪咨询  # 黄元申电影网站建设  # 扬州外贸营销推广公司  # 西安市seo公司  # 行唐seo优化电话  # 道里网站建设公司  # 模板网站很棒乐云seo  # 网站建设企业介绍ppt  # 永修个人网站建设低价  # 馥郁近义词网站建设  # 是一个  # 的是  # 仅需  # 管理器  # js如何使用教程  # 第一层  # 数据结构  # 运算符  # 如何使用  # 递归  # red  # 区别  # 递归函数  # 浏览器  # json  # js  # java  # javascript 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 多闪网页版在线观看免费入口_多闪官网访问入口  J*aScript打印功能_j*ascript输出控制  如何使用J*aScript精确选择并批量修改特定父元素下子链接的样式  在VS Code中配置和运行Dart程序的完整步骤  PyTorch模型训练准确率不提升:诊断与修复常见指标计算错误  单射、满射与双射的关系 一文理清所有逻辑  现代化 SciPy 一维插值:interp1d 的替代方案与最佳实践  1688商家版怎样分析买家画像精准供货_1688商家版分析买家画像精准供货【供货策略】  如何在CSS中使用visited与link控制链接颜色_visited link伪类配合  《主播少女的秘密账号迷宫》首支宣传片  Excel中VLOOKUP的第四个参数是干什么用的_Excel VLOOKUP第四参数作用解析  C++如何实现一个装饰器模式_C++设计模式之动态地给对象添加额外职责  vivo浏览器怎么扫描二维码 vivo浏览器内置扫一扫功能使用方法  steam官方入口大全 steam账号注册及操作指南  微博网页版怎么开启两步验证_微博网页版账号安全两步验证设置方法  Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】  为什么简单的XML文件也会解析失败? 检查隐藏的非打印字符(如BOM)的方法  J*aScript数组对象转换:按指定键分组与值收集  AWS EC2实例间SQL Server连接超时:安全组配置与故障排除指南  神庙逃亡小游戏在线玩 神庙逃亡小游戏入口  在Socket.IO连接中实现Access Token自动更新与动态重连  夸克浏览器图书入口 夸克手机浏览器阅读入口  一加Ace 6T支持全新明眸护眼:通过了最严苛的护眼小金标认证  PHP中高效并行检查多链接状态的教程  抖音从哪里进入网页版_抖音官方入口链接  QQ邮箱登录首页官网地址2026 QQ邮箱官方网页入口  正确连接J*aScript到HTML实现可点击图片与自定义事件处理  b站赚钱渠道_b站收益来源  XML中包含HTML标签导致解析错误? 正确嵌入非XML数据的两种方法  如何在网页中实现特定地点的随机图片展示  理解Python模块与全局变量的作用域管理  漫蛙漫画网页端入口 漫蛙2官方正版漫画站点  Node.js 中使用 node-cron 实现定时 API 数据抓取与处理  Win10系统怎么查看已安装更新_Win10卸载有问题的更新补丁  抖音极速版最新版本 抖音极速版官方下载地址  谷歌google账号注册详细步骤 谷歌账号注册官方教程  c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧  理解J*aScript Promise的微任务队列与执行顺序  抖音小游戏合成大西瓜免费秒玩入口链接 抖音小游戏热门合集秒玩网站  Node.js CSV 数据处理:基于字段空值条件过滤整条记录的策略  微信网页版扫码登录入口 微信网页版二维码登录入口  谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法  KFC早餐时段怎么领特惠代码_KFC早餐订餐优惠代码获取与使用说明  MAC怎么在地图App里使用“四处看看”_MAC体验部分城市的3D实景街景  Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全  J*a里如何使用forEach遍历Map_Map遍历方法说明  QQ网页版官方账号入口 QQ网页版网页版登录指南  妖精漫画网页版登录入口免费_妖精漫画官网主页直接阅读漫画  UC浏览器网页版登录入口官网 电脑版网址入口  在python-socketio事件处理器中安全访问Flask应用上下文 

搜索