浅拷贝:
随着cloneArray、cloneobj改变,originArray和originobj也发生了改变
深拷贝:(使用递归)
对目标进行完全拷贝,不像浅拷贝那样只是复制了一层引用,就连值也都复制了,只要进行了深拷贝,它们老死不相往来,谁也不会影响谁。
function deepClone(){//对每一层的数据都实现一次 创建对象->对象赋值 的操作
const targetObj = source.constructor === Array ? [] : {};//判断复制的目标是数组还是对象
for(let keys in source){//遍历目标
if(source.hasOwnPorperty(keys)){
if(targetObj[keys] && typeof(source[keys] === 'object') || typeof(source[keys] === 'Array')){//如果值是对象,就递归一下
targetObj[keys] = source.constructor === Array ? [] : {};
targetObj[keys] = deepClone(source[keys]);
}else{
targetObj[keys] = source[keys];
}
}
}
return targetObj;
}
const originArray1 = [1,2,3,4,5];
const originobj1 = {a:'a',b:'b',c:[1,2,3],d:{dd:'dd'}}
const cloneArray1 = originArray;
const cloneobj1 = originobj;
cloneArray1.push([[7,[8]],[9]]);
cloneobj1.a = {aaa:'aaa'};
cloneobj1.b = [1,{bbb:'bbb'},3];
console.log(cloneArray1);//[1, 2, 3, 4, 5, [[7,[8]],[9]]]
console.log(originArray1);//[1, 2, 3, 4, 5]
console.log(cloneobj1);//{a:{aaa:"aaa"},b:[1,{bbb:"bbb"},3],c:[1,2,3],d:{dd:"dd"}}
console.log(originobj1);//{a:"a",b:"b",c:[1,2,3],d:{dd:'dd'}}