说说深浅拷贝

129 阅读1分钟

基本数据类型

基本数据类型深浅拷贝都一样,都是生成一个新的副本。

引用数据类型

浅拷贝

浅拷贝复制对象的引用也就是指针,两指针指向同一块内存空间

方法:Object.assign()

深拷贝

深拷贝复制对象的引用和内存空间,两指针指向不同的内存空间,两对象互不影响。而深拷贝还细分了两种情况:

深拷贝的浅拷贝

深拷贝的浅拷贝生成一个新指针指向新开辟的内存空间,但只拷贝最外面一层,里层的引用数据类型仍共享某块内存空间,所以当我们修改里层对象时会影响到拷贝对象。

方法:

1、扩展运算符

2、Array.concat()

3、Array.slice()

4、for in

痛点:内层引用指向同一块内存空间,所以当原对象修改了内层对象的值会影响到拷贝对象

深拷贝的深拷贝

深拷贝的深拷贝通过递归的方式一层一层的拷贝,最后使得拷贝对象与源对象完全解耦,互不影响。

1、使用第三方库,lodash.js

2、JSON.parse(JSON.stringify(targetObj))

痛点:

无法解决循环引用问题

无法拷贝特殊对象,RegExp,Date,Set,Map等

忽略undefined、symbol和函数

3、手写深拷贝

测试: