浅拷贝
1.常见的情况
(1)对象等引用类型的赋值
(2)ES6新增的Object.assign() ,详细可见阮一峰老师的书;
(3)自己写一个浅拷贝
1 | function shallowClone(o){ |
2.浅拷贝的问题
指向同一块内存地址,修改新的值会影响旧的;
深拷贝
1.最简单常见的一种方法
const newObj = JSON.parse(JSON.stringify(oldObj));
该方法的问题
(1)无法实现对函数,稀疏数组,正则等特殊对象的拷贝
(2)会抛弃对象的constructor,所有的构造函数都指向了object。
(3)对象有循环引用,会报错。
补充知识点–稀疏数组简介:
数组元素的索引不一定要连续的,它们之间可以有空缺。
每个javaScript数组都有一个length属性;针对非稀疏数组,该属性就是数组元素的个数;针对稀疏数组,length比所有元素的个数要大。
2.递归实现一个深拷贝:
1 | function deepClone(o1, o2) { |
3.总结:
想自己写一个完美的深拷贝函数,需要考虑很多种情况,还是比较麻烦的,实际生产环境中,直接使用lodash的_.cloneDeep实现深度克隆就好;
原文链接: 公众号文章
欢迎随时交流~
如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理