首页 > web前端 > js教程 > 正文

对象合并与拷贝方法_浅拷贝与深拷贝实现

夢幻星辰
发布: 2025-11-14 21:55:02
原创
348人浏览过
答案是浅拷贝仅复制对象第一层属性,深拷贝递归复制所有层级。常用浅拷贝方法有Object.assign()和扩展运算符;深拷贝可使用JSON.parse(JSON.stringify())或递归实现,以避免引用共享导致的数据污染。

对象合并与拷贝方法_浅拷贝与深拷贝实现

在JavaScript中,对象的合并与拷贝是开发中常见的操作。由于对象是引用类型,直接赋值只会复制引用,修改新对象会影响原对象。因此需要通过浅拷贝或深拷贝来实现数据隔离。

浅拷贝实现方式

浅拷贝只复制对象的第一层属性,如果属性值是对象,则复制的是引用。

常用方法包括:
  • Object.assign():将多个源对象的可枚举属性复制到目标对象
  • 扩展运算符(...):语法简洁,适合单层对象合并
  • Array.prototype.slice():适用于数组的浅拷贝

示例:

const obj1 = { a: 1, b: { c: 2 } };
const obj2 = Object.assign({}, obj1);
// 或 const obj2 = { ...obj1 };

obj2.b.c = 3;
console.log(obj1.b.c); // 输出 3,说明内部对象被共享
登录后复制

深拷贝实现方式

深拷贝会递归复制对象的所有层级,完全断开引用关系。

常见实现方法:
  • JSON.parse(JSON.stringify()):简单有效,但有局限性(如无法处理函数、undefined、循环引用等)
  • 递归遍历实现:手动判断类型并递归复制,灵活性高
  • 使用第三方库(如 Lodash):提供成熟的 _.cloneDeep() 方法

基础递归深拷贝实现:

阿贝智能
阿贝智能

阿贝智能是基于AI技术辅助创作儿童绘本、睡前故事和有声书的平台,助你创意实现、梦想成真。

阿贝智能 17
查看详情 阿贝智能
function deepClone(obj, visited = new WeakMap()) {
  if (obj === null || typeof obj !== 'object') return obj;
  if (visited.has(obj)) return visited.get(obj); // 处理循环引用

  let clone;
  if (Array.isArray(obj)) {
    clone = [];
  } else {
    clone = {};
  }

  visited.set(obj, clone);

  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      clone[key] = deepClone(obj[key], visited);
    }
  }
  return clone;
}
登录后复制

对象合并操作

对象合并常用于配置项覆盖、状态更新等场景。

  • 使用 Object.assign(){...obj1, ...obj2} 实现浅层合并
  • 若需深层合并,需自定义逻辑或使用工具函数

示例:

const defaults = { timeout: 5000, retry: 3 };
const options = { timeout: 2000 };
const config = { ...defaults, ...options }; // { timeout: 2000, retry: 3 }
登录后复制

基本上就这些。理解浅拷贝与深拷贝的区别,能帮助我们避免意外的数据污染。选择合适的方法取决于具体需求,比如性能要求、数据结构复杂度等。

以上就是对象合并与拷贝方法_浅拷贝与深拷贝实现的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号