探讨深拷贝和浅拷贝

本文解析浅拷贝与深拷贝的区别:浅拷贝拷贝对象引用,易导致内容修改影响原对象;深拷贝则完整复制,适用于复杂对象结构。介绍常用方法,如Object.assign()、解构赋值和递归实现,并探讨深拷贝应对循环引用和数据丢失的解决方案。
摘要由CSDN通过智能技术生成

浅拷贝:

白话理解:  当需要拷贝对象的时候,如果使用浅拷贝的方式 对象里还有对象,深层次对象拷贝的是对象的地址值(内存中有两大内容 一个是存放的内容 一个是地址值由16进制随机构成)
导致的问题就是 当改变新拷贝的对象内容时,会影响旧对象

常见两种方法:

1 Object.assign()  Object对象的方法

2 通过解构赋值+扩展运算符的方式

深拷贝:

白话理解: 当需要拷贝对象时,想要完全拷贝一个新对象,不受之前的对象干扰,就可以通过深拷贝,无论对象里面有多层对象 都能完全拷贝

常见方法有:

1 通过递归 + for..in.. 方式  

缺点: 

  • 循环引用(堆溢出)
  • 数据丢失

解决思路:

将每次拷贝的数据进行存储,每次在拷贝之前,先看该数据是否拷贝过,如果拷贝过,直接返回,不再拷贝,如果没有拷贝,对该数据进行拷贝并记录该数据已拷

2 通过JSON.parse(JSON.parse())

缺点: 

  • 造成数据丢失和数据异常
  • function、undefined 直接丢失
  • NaN、Infinity 和-Infinity 变成 null
  • RegExpError对象只得到空对象

解决方法 :

采用递归

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值