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

  • 税金及附加现金流量表
  • 所得税交错了怎么处理
  • 金税四期对企业和个人的影响
  • 延期缴纳税款是纳税争议吗
  • 食堂辅助帐怎么记帐
  • 账面价值与计税基础之间没有差别只是计价的两种名称
  • 取得的股息红利收入计入哪个科目
  • 固定资产贷款偿还期计算公式
  • 个体工商年报怎么弄
  • 有留抵增值税怎么做账
  • 简易征收可以抵扣进项吗
  • 食堂购买食材明细表
  • 社会保险的登记和申报程序
  • 消费税可以跨年计提吗
  • 税务局开租赁发票
  • 外地预缴个人所得税会计分录
  • 非正常损失对应的进项税额
  • 增值税税负率是按年算吗
  • 企业转让二手房增值税
  • 长期股权投资账面价值和公允价值不一致
  • 其他应收款要做账吗
  • 进口增值税 海关
  • 要求做前两年的核酸检测
  • 投标费用属于什么会计科目
  • 代扣代缴增值税怎么申报
  • 生产销售部门职责
  • 房屋拆迁过渡费由哪个部门发
  • 鸿蒙系统怎么开发
  • win7防火墙设置不了
  • 账套没有以前年度调整
  • 农作物种植销售
  • 谈谈你对人民美好生活的理解
  • 固定资产账面价值是什么意思
  • 怎么登记总分类账簿
  • 企业年金在缴费阶段涉及的税种包括
  • 建设工程劳务分包合同属于建设工程合同吗
  • 公司注册认缴的期限一般是多少
  • uncompressing
  • 卖出周转材料的分录怎么做
  • 收残疾人就业保险合法吗
  • 以前年度支出如何计算
  • 增值税申报系统登录密码
  • 购进的货物含税吗
  • 增值税比对票表不通过
  • 应退或应补税额是负数
  • 离职员工个税申诉企业怎么处理
  • 应收账款调增调减?
  • 红字发票异常处理什么意思
  • 研发费用加计扣除是什么意思啊
  • 出口应纳增值税
  • 公司土地被征收怎么办
  • 认缴制下实收资本可以减少吗
  • 解缴税费
  • 企业积分是什么意思
  • 实收资本会变吗?
  • 跨年冲红发票账务处理需要调整申报表吗
  • 出售固定资产属于什么收入
  • mysql设置唯一值
  • 用户画像
  • windows锁定用户
  • Win10 Mobile 10536预览版用得越久越卡顿是怎么回事?
  • 苹果手机价格
  • mac版安装教程
  • linux如何查询
  • 如何创作图文并茂的图片
  • win10弹出提示
  • 电脑win7在哪
  • win 10设置提醒
  • 如何升级win10专业版
  • python2.7.11
  • nodejs遍历json数据
  • 可以生成选区的方式是使用
  • 基于专业性的家校双向互动,需要家长的学校教育参与
  • unity控制组件开关
  • javascriptz
  • js继承的方式
  • 苗木税收政策
  • 简并税率是什么意思
  • 小程序河南税务局
  • 个体税务登记资料不齐怎么办
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设