浅拷贝:
白话理解: 当需要拷贝对象的时候,如果使用浅拷贝的方式 对象里还有对象,深层次对象拷贝的是对象的地址值(内存中有两大内容 一个是存放的内容 一个是地址值由16进制随机构成)
导致的问题就是 当改变新拷贝的对象内容时,会影响旧对象
常见两种方法:
1 Object.assign() Object对象的方法
2 通过解构赋值+扩展运算符的方式
深拷贝:
白话理解: 当需要拷贝对象时,想要完全拷贝一个新对象,不受之前的对象干扰,就可以通过深拷贝,无论对象里面有多层对象 都能完全拷贝
常见方法有:
1 通过递归 + for..in.. 方式
缺点:
- 循环引用(堆溢出)
- 数据丢失
解决思路:
将每次拷贝的数据进行存储,每次在拷贝之前,先看该数据是否拷贝过,如果拷贝过,直接返回,不再拷贝,如果没有拷贝,对该数据进行拷贝并记录该数据已拷
2 通过JSON.parse(JSON.parse())
缺点:
- 造成数据丢失和数据异常
- function、undefined 直接丢失
- NaN、Infinity 和-Infinity 变成 null
RegExp
、Error
对象只得到空对象
解决方法 :
采用递归