递归函数实现深拷贝
思路:
- 定义一个方法,在其中,定义一个初始值为null的空变量来存储后续需要拷贝的对象。
- 先用typeof来判断要拷贝的对象的值类型是否为object并且obj不是null值,
- 如果不满足该条件则表明拷贝对象为基本数据类型,则直接将其赋值给空变量并作为函数的返回值返回即可;
- 如果拷贝对象为引用数据类型,则进一步用三元运算符判断引用对象是否为Array(通过instanceof判断),是则为空变量赋值为空数组,否则为空对象;
- 在此基础上再通过for(let key in obj)来遍历拷贝对象中的所有属性,再对其中属性值再次进行递归判断(递归本方法)
- 最后调用本方法,传入参数,其返回值即是深拷贝的数据
function copy(obj){
let newObj=null
if(typeog(obj)=="object"&&obj!==null){
newObj=obj intanceof Array?[]:{}
for(let key in obj){
newObj[key]=copy(obj[key])
}
}else{
newObj=obj
}
return newObj
}