一.浅拷贝
1.常见的情况
(1)对象等引用类型的赋值
(2)ES6新增的Object.assign() ,详细可见阮一峰老师的书;
(3)自己写一个
2.浅拷贝的问题
引用同一块内存,修改新的值会影响旧的;
二.深拷贝
1.最简单常见的一种方法
const newObj = JSON.parse(JSON.stringify(oldObj));
!该方法问题:
(1)无法实现对函数,稀疏数组,正则等特殊对象的拷贝
(2)会抛弃对象的constructor,所有的构造函数都指向了object。
(3)对象有循环引用,会报错。
~ 补充知识点--稀疏数组的概念:
数组元素的索引不一定要连续的,它们之间可以有空缺。每个javaScript数组都有一个length属性。针对非稀疏数组,该属性就是数组元素的个数;针对稀疏数组,length比所有元素的个数要大。
2.递归实现一个深拷贝:
3.总之,自己写一个完美的深拷贝函数,需要考虑很多种不同的情况,还是比较麻烦的,实际生产环境中,直接使用lodash的_.cloneDeep实现深度克隆就好;