竹笋

首页 » 问答 » 灌水 » 前端面试题03浅拷贝与深拷贝
TUhjnbcbe - 2023/3/25 19:30:00

一.浅拷贝

1.常见的情况

(1)对象等引用类型的赋值

(2)ES6新增的Object.assign(),详细可见阮一峰老师的书;

(3)自己写一个

2.浅拷贝的问题

引用同一块内存,修改新的值会影响旧的;

二.深拷贝

1.最简单常见的一种方法

constnewObj=JSON.parse(JSON.stringify(oldObj));

!该方法问题:

(1)无法实现对函数,稀疏数组,正则等特殊对象的拷贝

(2)会抛弃对象的constructor,所有的构造函数都指向了object。

(3)对象有循环引用,会报错。

~补充知识点--稀疏数组的概念:

数组元素的索引不一定要连续的,它们之间可以有空缺。每个javaScript数组都有一个length属性。针对非稀疏数组,该属性就是数组元素的个数;针对稀疏数组,length比所有元素的个数要大。

2.递归实现一个深拷贝:

3.总之,自己写一个完美的深拷贝函数,需要考虑很多种不同的情况,还是比较麻烦的,实际生产环境中,直接使用lodash的_.cloneDeep实现深度克隆就好;

1
查看完整版本: 前端面试题03浅拷贝与深拷贝