一、什么是深拷贝
深拷贝:复制的是值,把值给新的引用(意思是把值赋给新的变量)
二、手写深拷贝的逻辑
给函数传参,这个参数是我们要赋值的数据
首先声明一个新的变量,变量用来存我们拷贝的数据
判断这个参数的是否为数组,然后决定我们新声明的变量是数组还是对象
循环获取的参数,判断是否为引用类型
如果是基本类型就直接赋值给声明的变量
如果是引用类型就在调一遍函数本身,入参是这个引用类型(递归:自己调用自己)
三、代码示例
let obj = {
name: 'Rebecca',
age: 29,
fn: function(){ console.log('深拷贝') },
arr: [1, 2, 3],
children: {child: 'son'},
null: null,
undefined: undefined
}
function deepClone(obj) {
let newObj = []
Array.isArray(obj)? newObj = [] : {}
for(let key in obj){
if(typeof obj[key] == 'Object'){
newObj[key] = deepClone(obj[key])
}else{
newObj[key] = obj[key]
}
}
newObj.test = '深拷贝'
obj.test = '深拷贝222'
console.log('newObj:', newObj)
console.log('obj:', obj)
}
deepClone(obj)