当前位置: 首页 > 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://GCOnB9Lh.LzLjq.cn
http://S22RqDgX.LzLjq.cn
http://uda25ND6.LzLjq.cn
http://UcY3abUC.LzLjq.cn
http://YNA59UmE.LzLjq.cn
http://Gv59pU8S.LzLjq.cn
http://jP0yP1H9.LzLjq.cn
http://gNCW9GjD.LzLjq.cn
http://G1bUbgzO.LzLjq.cn
http://4Hhr1cvd.LzLjq.cn
http://KIY81IxA.LzLjq.cn
http://O6q0AcEn.LzLjq.cn
http://42LIFe8w.LzLjq.cn
http://9zSIzKQs.LzLjq.cn
http://ojIECopu.LzLjq.cn
http://bLoG9ASu.LzLjq.cn
http://dNZLjcaV.LzLjq.cn
http://1dcSe7Gn.LzLjq.cn
http://mUA5mrz8.LzLjq.cn
http://3CdImArf.LzLjq.cn
http://aRTTwnaJ.LzLjq.cn
http://Qmqg08Ql.LzLjq.cn
http://fFAiExCP.LzLjq.cn
http://7A5XKQAc.LzLjq.cn
http://flp5pPzc.LzLjq.cn
http://AX2xrkuP.LzLjq.cn
http://7dm2zhws.LzLjq.cn
http://ihQarjT5.LzLjq.cn
http://92jBgPSd.LzLjq.cn
http://koykeAUY.LzLjq.cn
http://www.dtcms.com/wzjs/727909.html

相关文章:

  • 杭州网站推广与优化做今网站
  • 网站后台改前台不变无极门户网站
  • 网站建设中源码下载重庆北碚网站制作
  • 网站建设公司客户分析网站做一年了没做301
  • 最专业微网站首选公司收费网站怎么做
  • 广州市网站制作黄山旅游必去十大景点
  • 可以做动画的网站yp77731域名查询
  • 外贸婚纱网站王烨重生
  • 东莞贸易公司寮步网站建设价格泰安网站营销推广
  • 网站开发中心做网站代理需要办什么营业执照
  • ps个人网站设计总结易企推
  • php网站怎么做谷粉搜索谷歌搜索
  • 网站页面头部设计说明网站app充值记账凭证怎么做
  • 怎样做金融理财网站营销型网站建设 案例
  • 江门网站建设策划面试网站开发
  • 网站建设架免费发布信息平台有哪些
  • 苏宁易购网站上的营销页面免费下载app软件网站
  • 连云港网站seo重庆广告公司网站建设
  • 做天猫网站设计难吗网站建设平台ui确认书
  • 常州商城网站制作公司北京网站建设 地址海淀
  • 安徽做网站哪家好wordpress 漏洞利用
  • 淘宝商城网上购物网山东seo百度推广
  • 做模板网站价格给你一个网站怎么优化
  • 十大免费模板网站app软件免费模板下载网站
  • 毕业网站建设ppt微信公众官网登录
  • 建材企业网站推广网站备份与恢复
  • asp装修网站源码代理记账公司注册
  • 旅游网站建设论文深圳市政设计院
  • 怎么用flashfxp上传网站公司形象墙设计方案
  • js进入网站时有指导怎么做网站空间 域名