一、深拷贝与浅拷贝
浅拷贝与深拷贝主要是针对复杂数据类型。
浅拷贝:拷贝的是地址,数据仍然只有一份,修改其中一个数据会影响另一个,简单的赋值就是浅拷贝。
深拷贝:拷贝的是数据,数据具有两份,修改一个数据不影响另一个,必须自己写代码来实现。
二、实现深拷贝的三种方法
1.递归
o表示被拷贝的数据,t表示拷贝的数据
function deepCopy(t, o){
for(let key in o){
// key表示数据的键名,o[key]则表示数据的键值
if(Array.isArray(o[key])){
//Array.isArray 用于判断是否是array数组类型
// 遇到数组,在t中创建一个空数组
t[key]=[]
deepCopy(t[key],o[key]);
}else if(o[key] instanceof Object){
// 判断是否是object,若为对象,以该实例对象为起点的原型链上必有Object原型对象
// 遇到对象,在t中创建一个空对象
t[key] = {}
deepCopy(t[key], o[key]);
}else{
// 简单数据类型
t[key] = o[key]
}
}
}
2.JSON
obj表示被拷贝的数据,target表示拷贝的数据
let strJSON = JSON.stringify(obj)
let target =JSON.parse(strJSON)
3.第三方代码库lodash
使用方法前需要引入lodash的js库
obj表示被拷贝的数据,target表示拷贝的数据
let target = _.cloneDeep(obj)