位置: IT常识 - 正文

深拷贝的五种实现方式(深拷贝的实现方式)

编辑:rootadmin
深拷贝的五种实现方式 一、什么是深拷贝和浅拷贝浅拷贝是创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是指向内存的地址 ,所以如果其中一个对象改变了这个引用类型的值,就会影响到另一个对象。深拷贝是将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象,且修改新对象不会影响原对象。二、实现深拷贝的五种方式

推荐整理分享深拷贝的五种实现方式(深拷贝的实现方式),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:深拷贝的三种实现方式,深拷贝的几种方法,深拷贝的定义,深拷贝的三种实现方式,深拷贝的实现原理,深拷贝的实现原理,深拷贝的定义,深拷贝的三种实现方式,内容如对您有帮助,希望把文章链接给更多的朋友!

1、递归调用

// 递归调用const deepCopy = (obj) => { // 判断传入的值是否为一个对象 if (obj === null && typeof obj !== "object") { return obj; } // 判断对象的类型 注意这里不考虑包装类对象 if (Object.prototype.toString.call(obj) === "[object Date]") { return new Date(obj); } if (Object.prototype.toString.call(obj) === "[object RegExp]") { return new RegExp(obj); } if (Object.prototype.toString.call(obj) === "[object Undefined]") { return new Error(obj); } // 判断对象是类 let newObj = Array.isArray(obj) ? [] : {} for(let item in obj){ if(typeof obj[item] === 'object') { newObj[item] = deepCopy(obj[item]) }else { newObj[item] = obj[item] } } return newObj};const foo = { name: '张三', info: { age: 24 }}const newFoo = deepCopy(foo)console.log(foo, newFoo)foo.info.age = 25console.log(foo, newFoo)深拷贝的五种实现方式(深拷贝的实现方式)

2、JSON.stringify + JSON.parse :::info 更多关于JSON.stringigy的注意事项请看MDN :::

// JSON.stringify// 情况一: 对象内不存在undefined、symbol、function类型的属性时// const foo = {// name: '张三',// info: {// age: 24// }// }// const newFoo = JSON.parse(JSON.stringify(foo))// console.log(foo, newFoo) // { name: '张三', info: { age: 24 } } { name: '张三', info: { age: 24 } }// foo.info.age = 25// console.log(foo, newFoo) // { name: '张三', info: { age: 25 } } { name: '张三', info: { age: 24 } }// 情况二:当对象内存在undefined、symbol、function类型的属性时,在序列化过程中会被忽略。// 当属性为NaN 和 Infinity 格式的数值及 null 都会被当做 nul// const foo = {// name: "张三",// age: undefined,// height: 183,// gender: Symbol("男"), //// say: () => {},// aa: NaN,// };// const newFoo = JSON.parse(JSON.stringify(foo));// console.log(foo, newFoo); // {aa: NaN, age: undefined, gender: Symbol(男), height: 183, name: "张三"} { {name: '张三', height: 183, aa: null} }// JSON.stringify() 第二个参数为可选参数,可以是一个函数或者数组,// 当是数组时表示需要被转化的属性列表,但undeinfed,symbol,function类型的属性依然会被忽略// const newFoo = JSON.parse(JSON.stringify(foo, ['name', 'age', 'gender', 'say', 'aa']));// console.log(newFoo) // {name: '张三', aa: null}

3、lodash

const _ = require('lodash')const foo = { name: '张三', info: { age: 24 }}const newFoo = _.cloneDeep(foo);foo.info.age = 25console.log(foo, newFoo) // { name: '张三', info: { age: 25 } } { name: '张三', info: { age: 24 } }

4、Object.assgin

注意:只有当对象中没有嵌套对象时,才可以实现深拷贝const foo = { name: '张三', age: 24}const newFoo = Object.assign({}, foo)foo.age = 25console.log(foo, newFoo) // {name: '张三', age: 25} {name: '张三', age: 24}// 对象中有内嵌的对象时const foo = { name: '张三', info: { age: 24 }}const newFoo = Object.assign({}, foo)foo.info.age = 25console.log(foo, newFoo) // { name: '张三', info: { age: 25 } } { name: '张三', info: { age: 25 } }

5、structuredClone

const foo = { name: '张三', info: { age: 24 }}const newFoo = structuredClone(foo) // foo.info.age = 25console.log(foo, newFoo) // { name: '张三', info: { age: 25 } } { name: '张三', info: { age: 24 } }

该方法为Web最新的 API,存在兼容问题

本文链接地址:https://www.jiuchutong.com/zhishi/295281.html 转载请保留说明!

上一篇:ntp-keygen命令 生成NTP主机密钥(ntpdate 命令)

下一篇:基于Selenium+Python的web自动化测试框架(附框架源码+项目实战)(基于Selenium的自动化测试平台设计与实现)

  • ip协议版本选哪个(ip协议类型怎么选)

    ip协议版本选哪个(ip协议类型怎么选)

  • 芒果TV为什么不能选集(芒果tv为什么不能取消自动续费)

    芒果TV为什么不能选集(芒果tv为什么不能取消自动续费)

  • 快手直播的分是怎么来的

    快手直播的分是怎么来的

  • 电脑冷启动按哪几个键(电脑冷启动按哪几个键图片)

    电脑冷启动按哪几个键(电脑冷启动按哪几个键图片)

  • 华为返回键怎么调整到右边(华为返回键怎么弄)

    华为返回键怎么调整到右边(华为返回键怎么弄)

  • xsmax发热正常吗(xsmax发热严重怎么回事)

    xsmax发热正常吗(xsmax发热严重怎么回事)

  • win7停止支持怎么办(windows7停止支持)

    win7停止支持怎么办(windows7停止支持)

  • 双波浪线边框怎么设置(加双波浪线边框)

    双波浪线边框怎么设置(加双波浪线边框)

  • windows回收站是什么(Windows回收站是哪里的一块区域)

    windows回收站是什么(Windows回收站是哪里的一块区域)

  • 蓝牙key是什么(手机银行蓝牙key配对不上)

    蓝牙key是什么(手机银行蓝牙key配对不上)

  • 运算器的两个主要功能是(运算器的两个主要功能是指什么)

    运算器的两个主要功能是(运算器的两个主要功能是指什么)

  • iphone型号ll是什么版本(苹果型号ll是哪个国家)

    iphone型号ll是什么版本(苹果型号ll是哪个国家)

  • 荣耀magic2的隐藏功能(荣耀magic2怎么隐藏图标)

    荣耀magic2的隐藏功能(荣耀magic2怎么隐藏图标)

  • 华为曲面屏容易摔碎吗(华为曲面屏容易误触吗)

    华为曲面屏容易摔碎吗(华为曲面屏容易误触吗)

  • 如何设置手机充电时间(如何设置手机充电自动断电)

    如何设置手机充电时间(如何设置手机充电自动断电)

  • 拼多多保留15个团什么意思(拼多多保留15个好友)

    拼多多保留15个团什么意思(拼多多保留15个好友)

  • 闲鱼被封号了怎么办(闲鱼封号了还能收到消息吗)

    闲鱼被封号了怎么办(闲鱼封号了还能收到消息吗)

  • iphonex通话听筒没声音(苹果x听筒打电话有杂音)

    iphonex通话听筒没声音(苹果x听筒打电话有杂音)

  • 红米k20如何强制关机(红米k20如何强制清除数据)

    红米k20如何强制关机(红米k20如何强制清除数据)

  • u盘无法识别是坏了吗(u盘无法识别是坏了吗win10)

    u盘无法识别是坏了吗(u盘无法识别是坏了吗win10)

  • word 邮件怎么合并(word邮件合并怎么弄)

    word 邮件怎么合并(word邮件合并怎么弄)

  • 方舟编译器怎么开(方舟编译器怎么没消息了)

    方舟编译器怎么开(方舟编译器怎么没消息了)

  • vivoiqoo什么时候出的(vivoiqoo什么时候降价)

    vivoiqoo什么时候出的(vivoiqoo什么时候降价)

  • wps查找替换在哪里(wps查找替换在哪里操作?)

    wps查找替换在哪里(wps查找替换在哪里操作?)

  • 怎么拍抖音短视频(怎么拍抖音短视频而且没有杂音)

    怎么拍抖音短视频(怎么拍抖音短视频而且没有杂音)

  • 表格滚动条怎么设置(表格滚动条怎么设置变短)

    表格滚动条怎么设置(表格滚动条怎么设置变短)

  • 2    BASH 的基本语法(bash的主要功能)

    2 BASH 的基本语法(bash的主要功能)

  • 小规模纳税人销售已使用固定资产
  • 2023增值税最新税率
  • 水利建设基金怎么交
  • 用友会计报表
  • 去税务局开增值税专用发票需要缴费吗
  • 金税四期监控个人在银行的存款吗
  • 个人出租房屋需要办理什么手续
  • 公司销户本金转到哪里
  • 资产减值损失属于什么科目借方增加还是减少
  • 吸收合并的税务处理增值税风险
  • 职工福利企业所得税
  • 增值税普通发票需要交税吗
  • 财务费用利息如何结转
  • 总公司收回未分配利润如何入账?
  • 预付账款是付没付钱
  • 福利进项税额转出怎么做账务处理
  • 企业给员工发放最低生活保障
  • 企业获得的燃油补贴为什么还需要缴纳企业所得税呢?
  • 企业税收案例分析
  • 五证一户什么意思
  • 服装发票怎么进项抵扣
  • 劳务派遣企业差额扣除占比过高怎么办
  • 物业公司怎么开展业务
  • 汇算清缴的所得税会计分录
  • 怎么看是不是小叶紫檀手串
  • 股东垫支开办费
  • 电信增值税发票怎么抵扣
  • 以前年度损益调整在利润表中怎么填
  • 插上U盘电脑无法启动怎么回事
  • 网页打不开是什么
  • linux命令使用
  • 公司出售已经提完折旧的机器
  • 员工意外受伤费用谁出
  • 两台电脑文件共享,显示没有访问权限
  • 企业低值易耗品有哪些
  • laravel 5.3中自定义加密服务的方案详解
  • 购买土地缴纳契税
  • nginx gui
  • eterm指令退出a
  • 短期借款转为长期借款引起的会计要素变化
  • dedecms怎么用
  • 应退或应补税额是负数
  • 餐厅餐具如何使用
  • 只有收据没有发票怎么入账
  • 固定资产清理的审计目标不包括
  • 包装物租金如何界定
  • 发票抬头是个人的可以报销吗
  • 第三方平台佣金账务处理
  • 公司买的吃的计入什么科目
  • 营改增适用范围
  • 现金支票存根联丢失怎么办
  • 公司年底做财务报表什么吗
  • 管理费用一般包含研发费用吗
  • 商贸公司会计成本核算方法
  • 进项税额的ppt
  • 发票作废有什么后果
  • mysql缩进快捷键
  • mysql数据库备份方法
  • ubuntu中如何设置克隆屏
  • 网卡驱动intel
  • linux忘记root密码怎么修改
  • macbookzen
  • mac双系统怎么调整磁盘空间
  • win8怎么调整屏幕分辨率
  • jquery点击切换div
  • android入门视频教程
  • nodejs异步编程及原理
  • jquery的css样式
  • jquery示例
  • python中的字符型
  • 常见的shell脚本
  • python设计作品
  • jquery网页设计作业
  • python线程daemon
  • 重庆网上税务局个人怎么绑定企业账户
  • 各地市的税务局有哪些
  • 小规模纳税人可以开13%的发票吗
  • 个人劳务承包需要什么资质
  • 地税局有实权吗
  • 职工疗养费可以税前扣除吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设