当前位置: 首页 > wzjs >正文

青岛城阳做网站上海seo推广价格

青岛城阳做网站,上海seo推广价格,国外科技类网站,温室大棚建设 网站及排名转卖1. 为什么需要这个 deepClone 函数? 在 JavaScript 中,直接赋值对象或数组时,只是复制了引用(浅拷贝),修改新对象会影响原对象。例如: const original { a: 1, b: { c: 2 } }; const shallow…

1. 为什么需要这个 deepClone 函数?

在 JavaScript 中,直接赋值对象或数组时,只是复制了引用(浅拷贝),修改新对象会影响原对象。例如:

const original = { a: 1, b: { c: 2 } };
const shallowCopy = original; // 浅拷贝
shallowCopy.b.c = 3;console.log(original.b.c); // 3(原对象被意外修改)

深拷贝(Deep Clone) 可以彻底复制对象及其嵌套结构,使新旧对象完全独立。


2. deepClone 函数解析

function deepClone(obj) {// 1. 处理基本类型(null, number, string, boolean, undefined, symbol)if (obj === null || typeof obj !== 'object') {return obj;}// 2. 处理 Date 对象if (obj instanceof Date) {return new Date(obj);}// 3. 处理 RegExp 对象if (obj instanceof RegExp) {return new RegExp(obj);}// 4. 初始化克隆对象(数组或普通对象)const cloneObj = Array.isArray(obj) ? [] : {};// 5. 递归拷贝所有属性for (const key in obj) {if (obj.hasOwnProperty(key)) {cloneObj[key] = deepClone(obj[key]);}}return cloneObj;
}

关键点解析

  1. 基本类型直接返回
    nullnumberstringbooleanundefinedSymbol 等直接返回,因为它们是不可变的。

  2. 处理 DateRegExp
    这两种对象需要特殊处理,否则直接赋值会导致引用共享。

  3. 递归拷贝对象属性
    遍历对象的所有自有属性(hasOwnProperty 过滤原型链属性),递归调用 deepClone 确保嵌套结构也被复制。


3. 使用示例

const original = {name: "Alice",age: 25,birthDate: new Date("1998-05-20"),skills: ["JavaScript", "React"],address: {city: "Beijing",zip: "100000"},regex: /hello/gi
};const cloned = deepClone(original);// 修改克隆对象,不影响原对象
cloned.age = 26;
cloned.skills.push("Vue");
cloned.address.city = "Shanghai";console.log(original.age); // 25(未受影响)
console.log(original.skills); // ["JavaScript", "React"](未受影响)
console.log(original.address.city); // "Beijing"(未受影响)

4. 适用场景

普通对象、数组、DateRegExp
嵌套结构(多层对象/数组)
不需要处理循环引用的场景

5. 局限性

不支持循环引用(如 a.self = a,会导致栈溢出)
不处理 MapSetWeakMapWeakSet
不拷贝原型链上的属性


6. 如何改进?

如果需要更强大的深拷贝:

  1. 处理循环引用:使用 WeakMap 缓存已拷贝对象(增强版实现)。
  2. 支持更多类型:如 MapSetBlob 等。
  3. 性能优化:改用迭代方式避免递归栈溢出。

7. 总结

这个 deepClone 函数:

  • 代码简洁(仅 15 行)
  • 覆盖大部分常见需求(对象、数组、DateRegExp
  • 无第三方依赖(纯原生 JS 实现)

推荐在简单场景下使用,复杂数据建议用 lodash.cloneDeep 或完整版深拷贝。


你平时用什么方式实现深拷贝?欢迎讨论! 🚀

http://www.dtcms.com/wzjs/544097.html

相关文章:

  • 企业网站代维护泉州百度开户
  • 网站建设什么科目浅谈海尔的电子商务网站建设
  • 新版网站上线响水县住房建设局网站
  • 网站介绍视频怎么做的重庆网站建设公司多少钱
  • win7 搭建iss网站wordpress wp_footer()
  • 企业网站 用个人备案如何做网上水果网站系统
  • 响应式网站建站价格网上做任务网站有哪些内容
  • 杭州网站建设网页设计师的工作
  • 门户子网站建设申请模拟ip访问网站
  • 免费的logo网站qq是哪家公司的产品
  • 中国铁路监理建设协会网站网页搜索排名分析
  • 神魔网站建设wordpress浏览统计
  • 某俄文网站网络搭建drc
  • html5网站开发开题报告基于superslide2的wordpress幻灯片
  • 网站可以给pdf做笔记广东网站备案 时间
  • 利川做网站网站制作开发的步骤和方法
  • 大型企业网站设计案例模仿ios系统的html网站
  • 手机网站用什么软件怎么建立一个个人网站
  • 自己做视频网站资源从哪里来摄影网站模板
  • 工程管理毕业设计代做网站网络营销的模式有哪些
  • html5线上运营网站做地产网站
  • 北京房产网二手房出售百度推广整体优化网站
  • 想要网站导航推广页湖南网站开发 岚鸿
  • 有什么网站可以做家装中国100强企业排名表
  • 广西网站建设成都网站营销推广公司
  • 网站设计有什么前景合肥专业制作网站
  • 虾皮购物网站怎么做php网站开发实例教程源代码
  • 做网站用php转html百度收录的网页数量
  • 有没有做网站兼职微信公众号怎么制作网页
  • 外贸网站建站注意事项模板网站音响案例