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

  • vivo手机怎么解除禁止安装权限(vivo手机怎么解锁?忘记密码了)

    vivo手机怎么解除禁止安装权限(vivo手机怎么解锁?忘记密码了)

  • 苹果x黑屏苹果图标闪(iphone x 黑屏没反应)

    苹果x黑屏苹果图标闪(iphone x 黑屏没反应)

  • 抖音一口气发太多了要等多久(抖音一口气发太多了怎么解除)

    抖音一口气发太多了要等多久(抖音一口气发太多了怎么解除)

  • 相册里的图片怎么合并成一张发送(相册里的图片怎么打包成文件)

    相册里的图片怎么合并成一张发送(相册里的图片怎么打包成文件)

  • 苹果se与华为p40对比(华为p40与2020苹果se参数对比)

    苹果se与华为p40对比(华为p40与2020苹果se参数对比)

  • 抖音播放量是人数还是次数(抖音播放量是人数吗)

    抖音播放量是人数还是次数(抖音播放量是人数吗)

  • se2有3dtouch吗(苹果se2有3dtouch吗)

    se2有3dtouch吗(苹果se2有3dtouch吗)

  • 淘宝无理由退货对买家有影响吗(淘宝无理由退货运费谁承担)

    淘宝无理由退货对买家有影响吗(淘宝无理由退货运费谁承担)

  • 主机一直响是怎么回事(主机一直响是怎么回事儿)

    主机一直响是怎么回事(主机一直响是怎么回事儿)

  • 华为手机怎么拍不了照片(华为手机怎么拍试卷去答案)

    华为手机怎么拍不了照片(华为手机怎么拍试卷去答案)

  • qq注销了聊天记录还在吗(qq注销了聊天记录网警还能查得到吗)

    qq注销了聊天记录还在吗(qq注销了聊天记录网警还能查得到吗)

  • 怎么去除手机喇叭里的灰尘(手机喇叭有杂音怎么清理)

    怎么去除手机喇叭里的灰尘(手机喇叭有杂音怎么清理)

  • 淘气值有什么用(怎么提升淘宝淘气值)

    淘气值有什么用(怎么提升淘宝淘气值)

  • 运算器和什么的集合体称为cpu(运算器和什么的功能有关)

    运算器和什么的集合体称为cpu(运算器和什么的功能有关)

  • 主机后面的接口(主机后面的接口没反应)

    主机后面的接口(主机后面的接口没反应)

  • 怎样在wps表格中画斜线(怎样在wps表格中添加日历)

    怎样在wps表格中画斜线(怎样在wps表格中添加日历)

  • 如何做抖音短视频(如何做抖音短视频原创)

    如何做抖音短视频(如何做抖音短视频原创)

  • 目前屏占比最高的手机(屏占比最高的)

    目前屏占比最高的手机(屏占比最高的)

  • 小米蓝牙耳机怎么开机(小米蓝牙耳机怎么连接苹果)

    小米蓝牙耳机怎么开机(小米蓝牙耳机怎么连接苹果)

  • 美团外卖会员怎么取消自动续费(美团外卖会员怎么退款申请退款)

    美团外卖会员怎么取消自动续费(美团外卖会员怎么退款申请退款)

  • 如何禁止在开始菜单中卸载应用(如何禁用开始目录的app自动推荐)

    如何禁止在开始菜单中卸载应用(如何禁用开始目录的app自动推荐)

  • 【C语言进阶】文本与二进制操作文件,优化通讯录。(c语音进阶)

    【C语言进阶】文本与二进制操作文件,优化通讯录。(c语音进阶)

  • 研发支出属于什么现金流量项目
  • 季报业务活动表本月数
  • 当月减少的固定资产当月停止折旧
  • 代销商品怎么交增值税
  • 个人注册公司有什么优惠政策
  • 提取的应交增值税怎么算
  • 个体工商户核定征收税率
  • 甲供材和清包工的账务处理
  • 出售简易征收的固定资产的增值税怎么计算
  • 非营利组织项目
  • 股息红利所得如何缴纳个人所得税
  • 合同一方按手印另一方没按有效吗
  • 国外客户给你寄来礼物怎么感谢
  • 2020年减免水利基金会计分录
  • 企业购进废旧厂房的分录
  • 免息分期怎么还款
  • 福利费可以抵扣个税吗
  • 专用发票与普通发票代码区别
  • 租赁场地费入什么科目
  • 三板市场前世今生
  • 员工转入子公司怎么做账
  • 水电费发票可以开吗
  • 公司注销固定资产如何处理
  • 总分机构异地移送
  • 不需要缴纳增值税和免税的区别
  • 对公汇款银行退回
  • 欠税不交的后果 个人
  • 微软汽车
  • php socket函数
  • php string函数
  • php中字符串函数
  • 视同销售成本如何确认?
  • 未取得发票的工程预付款怎么入账
  • 营改增后企业要交哪些税
  • 什么是两免一补的条件
  • 税务稽查补税
  • 国有企业收到财政补助如何做账
  • 2018年残保金申报表填表说明
  • php判断是否连接数据库
  • 固定资产没有价值怎么入账
  • 收到工程款怎么做凭证
  • 租房开的发票收的税怎么做账?
  • 税控系统维护费普通发票可以全额抵扣吗
  • 固定资产的原价包括增值税吗
  • CINLINELE工具
  • 公司承担员工的社保费会计分录
  • 补缴教育费附加免征滞纳金
  • mongodb 随机获取一条数据
  • mongodb与mysql相比的优缺点
  • 收到保险赔款入什么科目
  • 核定扣除投入产品怎么算
  • 税率5个点是什么意思
  • 购买的手机可以退货吗
  • 个体户季报要抄税吗
  • 不交社保的职业
  • 差旅费科目设置
  • 开办费的最新账务处理2021
  • 长期股权投资账务处理实例
  • 小规模纳税人涉嫌虚开发票
  • 省外出差
  • 什么是资金结存,它具体包括哪些内容
  • 现金流量结构分析表
  • 期末存货采用成本与什么孰低法计价
  • win8系统升级win8.1
  • 苹果电脑如何查看WiFi密码
  • 笔记本xp系统怎么升级win7系统
  • mac清理所有数据
  • windows7自带的画图软件在哪里打开
  • mac os常用快捷键
  • win10怎么把中文系统改成英文
  • fdreader.exe是什么程序
  • player文件怎么打开
  • windows8.1怎么设置密码
  • jquery上传图片并预览
  • kvm 安装
  • 查cpu内存命令
  • jquery easy ui
  • jQuery 更改checkbox的状态,无效的解决方法
  • jquery 动态添加元素
  • python深入浅出
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设