位置: 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的自动化测试平台设计与实现)

  • oppo怎么卸载breeno(oppo怎么卸载主题商店)

    oppo怎么卸载breeno(oppo怎么卸载主题商店)

  • 小米手表微信没有提醒(小米手表微信没有声音)

    小米手表微信没有提醒(小米手表微信没有声音)

  • QQ健康系统实名认证修改为什么不符合条件

    QQ健康系统实名认证修改为什么不符合条件

  • 红米k30不能识别蓝牙耳机(红米k30不能识别u盘)

    红米k30不能识别蓝牙耳机(红米k30不能识别u盘)

  • iphone开不了机充电没反应怎么回事(iphone开不机充电出现白苹果)

    iphone开不了机充电没反应怎么回事(iphone开不机充电出现白苹果)

  • 苹果手机重启不了怎么回事(苹果手机重启不开机怎么办)

    苹果手机重启不了怎么回事(苹果手机重启不开机怎么办)

  • cad多线样式快捷键(cad多线样式快捷键是哪个)

    cad多线样式快捷键(cad多线样式快捷键是哪个)

  • 购电卡读卡失败原因(购电卡读卡失败怎么解决)

    购电卡读卡失败原因(购电卡读卡失败怎么解决)

  • windows7中的什么有三种类型(Windows7中的什么主要用来进行网络管理)

    windows7中的什么有三种类型(Windows7中的什么主要用来进行网络管理)

  • 手机无法开机一直重启(手机无法开机一直黑屏)

    手机无法开机一直重启(手机无法开机一直黑屏)

  • iphone11的耳机插孔在哪里(苹果11的耳机插口)

    iphone11的耳机插孔在哪里(苹果11的耳机插口)

  • mp2g2ch/a是ipad几代(ipad mp2g2ch/a是什么)

    mp2g2ch/a是ipad几代(ipad mp2g2ch/a是什么)

  • 网线100兆是什么意思(网线100兆是什么概念)

    网线100兆是什么意思(网线100兆是什么概念)

  • vivox27自带美颜吗(vivox20美颜)

    vivox27自带美颜吗(vivox20美颜)

  • qq活跃头衔怎么升级(qq活跃头衔怎么变颜色)

    qq活跃头衔怎么升级(qq活跃头衔怎么变颜色)

  • 平板电脑可以当手写板用吗(平板电脑可以当手机用吗)

    平板电脑可以当手写板用吗(平板电脑可以当手机用吗)

  • 手机缓存的视频能导入电脑看嘛(手机缓存的视频在哪里找)

    手机缓存的视频能导入电脑看嘛(手机缓存的视频在哪里找)

  • 小米9步数怎么开启(小米9手机步数在哪设置)

    小米9步数怎么开启(小米9手机步数在哪设置)

  • vue怎么改别人的水印(vue配置别名)

    vue怎么改别人的水印(vue配置别名)

  • 手机qq版本怎么降级(手机qq的版本)

    手机qq版本怎么降级(手机qq的版本)

  • 苹果手机私密照片在哪(苹果手机私密照片存哪里保险)

    苹果手机私密照片在哪(苹果手机私密照片存哪里保险)

  • 打印机怎样维修(打印机坏了怎么维修)

    打印机怎样维修(打印机坏了怎么维修)

  • 怎样查询自己的逻辑id(怎样查询自己的高考成绩往年)

    怎样查询自己的逻辑id(怎样查询自己的高考成绩往年)

  • 快手版本低怎么才能升级(快手版本低怎么升级最快)

    快手版本低怎么才能升级(快手版本低怎么升级最快)

  • word文档怎么关闭护眼模式(word文档怎么关闭批注)

    word文档怎么关闭护眼模式(word文档怎么关闭批注)

  • 美团如何开会员(美团如何开会员卡)

    美团如何开会员(美团如何开会员卡)

  • ps怎么选中图形(ps怎么选中图形放大)

    ps怎么选中图形(ps怎么选中图形放大)

  • 递延所得税资产和负债怎么理解
  • 增值税欠缴
  • 普通发票的税率1%
  • 缴纳城镇土地使用税
  • 给客户开增值税专用发票
  • 企业的承兑汇票贴息很高说明什么
  • 建筑行业分包款要分项目扣除吗
  • 企业出售不动产的涉税问题
  • 一般纳税人的进项税额计入成本吗
  • 开票名称开错了
  • 项目部电缆属于固定资产吗
  • 开发票第一行
  • 广告公司如何经营管理
  • 410768金税盘
  • 营改增后建筑公司账务处理
  • 出口转内销增值税报表怎么填
  • 折扣折让 红字发票账务处理
  • 手写农产品发票有效吗
  • 税局代开的法律顾问费能否抵扣
  • 出口退税转为免税
  • 持有营业执照
  • 转让五年以上住房免征个人所得税吗?
  • 生育津贴报销流程是怎么样的要去社保局问吗
  • 商标转让增值税税目
  • 预提怎么写会计分录
  • 上月销售的货物会计分录
  • 预收账款预提费用
  • 资产负债率高说明长期偿债能力强吗
  • 小规模给个人开普票怎么填写
  • win10卸载deepin
  • 因有减免税款不退怎么办
  • 增值税出口服务包括什么
  • 房地产企业开发成本结转
  • 公司邮票报销
  • 公司融资a轮说明什么
  • 资产评估增值额
  • windows7旗舰版最新版本
  • 一场雷雨还是一阵雷雨
  • php函数的定义和调用
  • php实现留言板功能
  • 挥别2020逐梦2021
  • mfc中format
  • python中htmlparser解析html
  • phpcms程序
  • 净利润弥补以前年度亏损
  • 事业单位会计准则与政府会计准则的区别
  • 企业适用的增值税税率
  • sql 文件存储
  • 其他应收款余额在贷方什么意思
  • 帮员工购买意外险怎么记到分录
  • 企业常用会计科目表及其解释
  • 非流动资产处置损失计入什么科目
  • 原材料计入什么摘要
  • 给员工缴纳的雇工保险
  • 损益类科目如何填写手工总账
  • 小规模附加税优惠政策最新2023
  • 在保险中,保险利益的载体是
  • 小规模纳税人残保金减免政策
  • 年末净利润为负数结转本年利润实例
  • 会计凭证传递的基本要求
  • 软件开发是否属于采购目录
  • 注册资本和实收股本的区别
  • mysql5.7.23
  • sqlserver清空所有表数据
  • 联想昭阳k41笔记本
  • 微软推送windows 11
  • windows无法预览文件
  • 简述在windows中创建用户的步骤
  • bootstrap基础
  • div+css布局是什么
  • android iframe
  • js日期格式
  • jquery显示图片
  • node.js ejs
  • jquery java
  • 基于mvc设计模型的框架
  • 湘医保缴费怎么网上缴费
  • 外购应税消费品用于生产非应税消费品
  • 广东房产契税电话查询
  • 依法征拆
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设