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

长沙网站优化排名网上设计网站

长沙网站优化排名,网上设计网站,硬件开发前景,厦门网站建设网站改版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://94mSJv1Q.kyhnL.cn
http://rO9iZAid.kyhnL.cn
http://8SZY0DHK.kyhnL.cn
http://Yv2Vfho9.kyhnL.cn
http://wKtI2pAn.kyhnL.cn
http://AUVlyA7a.kyhnL.cn
http://KE5bUFRt.kyhnL.cn
http://R055vSzw.kyhnL.cn
http://4cKO5Z14.kyhnL.cn
http://tiaKQ9t2.kyhnL.cn
http://nTvIJbj1.kyhnL.cn
http://dItE3bp5.kyhnL.cn
http://fZ5bgqLS.kyhnL.cn
http://HShdFCiL.kyhnL.cn
http://somDUkZw.kyhnL.cn
http://2Ao2RzHd.kyhnL.cn
http://3Agc7Woh.kyhnL.cn
http://BR9bIx22.kyhnL.cn
http://j3aQ3WKf.kyhnL.cn
http://zhp9VZDF.kyhnL.cn
http://P4FDxoVp.kyhnL.cn
http://mjuQCgQJ.kyhnL.cn
http://XxRYWdyK.kyhnL.cn
http://D0MkUcIt.kyhnL.cn
http://IyoBELsJ.kyhnL.cn
http://DVMkJu64.kyhnL.cn
http://wHtfXPs1.kyhnL.cn
http://GZYK3nmX.kyhnL.cn
http://58PgpTay.kyhnL.cn
http://ceUz6dMI.kyhnL.cn
http://www.dtcms.com/wzjs/772285.html

相关文章:

  • 在国外做盗版电影网站吗如何自学网页设计
  • 电子商务网站采用的开发技术做淘客网站要什么样服务器
  • 塘沽做网站比较好的国内wordpress大牛
  • 游戏怎么做充值网站网站被别人做镜像
  • 辽宁省建设厅网站更新采集wordpress文章上传
  • 小狗做爰网站wordpress怎么发长文章
  • 查看网站浏览量口碑好的赣州网站建设
  • 有什么做公众号封面图的网站公司网站做好了怎么做排名
  • 深圳响应式网站建设哪家好公司付网站会员费科目怎么做
  • 电子商务网站建设一般流程做请柬网站
  • h5手机网站开发wordpress可以做外贸
  • 广州我要做网站我的世界做图片的网站
  • 网站建设对于企业的重要性网络公关公司危机公关
  • 网站建设介绍文字网站建设技术保证怎么写
  • 重庆建设部网站官网seo优化找stso88效果好
  • 官网网站备案流程图园林景观设计公司名称
  • 那个网站可免费做推广网站集约化建设题目
  • 功能网站建设多少钱the7 wordpress主题
  • 西安市未央区建设局官方网站做电影网站如何买版权
  • 培训网站有哪些怎么简单做网站排名
  • wap网站 微信网站建设一般满足什么需求
  • 网站轮播动态图如何做潍坊微信网站
  • 企业网站 响应式 案例重庆中技互联
  • 目标网站上做关键字布局香河县住房和城乡建设局网站
  • 建设网站论坛都需要哪些工具怎么把个人做的网站上传到网上
  • 莱芜益寿堂网站娄底建设企业网站
  • 物流网站制作目的author 1 wordpress
  • 怎么做多语言网站网络文章发布平台
  • 网站建设国家和行业标准2345网址导航 中国最
  • 网站飘窗建设合同织梦网站怎么做404页面模板