1.深拷贝 浅拷贝
1.1 浅拷贝
//针对的是数组和对象
//浅拷贝 拷贝的是地址 对原数组也有影响
let arr1 = [1,2,3,4];
let arr2 = arr1;
arr2.push(5);
console.log(arr1);
let obj1 = {a:1,b:2};
let obj2 = obj1;
obj2["c"] = 3;
console.log(obj1);
1.2浅拷贝 拷贝的是值
let arr1 = [1,2,3,4];
let arr2 = [];
for(let i=0;i<arr1.length;i++){
arr2[i] = arr1[i];
}
arr2.push(5);
console.log(arr1,arr2);
let obj1 = {a:1,b:2};
let obj2 ={};
for(let i in obj1){
obj2[i] = obj1[i];
}
//对原数组有影响
let obj1 = {a:[1],b:2};
let obj2 ={};
for(let i in obj1){
obj2[i] = obj1[i];
}
obj2.c =3;
obj2.a.push(2);
console.log(obj1,obj2);
1.3封装深拷贝函数
function deepCopy(obj) {
let copyObj = null;
if (Array.isArray(obj)) {
copyObj = [];
} else {
copyObj = {};
}
for (let i in obj) {
//判断是否引用类型
if (typeof obj[i] == "object") {
copyObj[i] = deepCopy(obj[i]);
} else {
copyObj[i] = obj[i];
}
}
return copyObj;
}
//验证
let obj1 = { a: [1], b: 2 };
let obj2 = deepCopy(obj1);
obj1.a.push(2);
console.log(obj2);
//实现深拷贝
//[[1,[2,3]],[4],[5,[6]]] => [1,2,3,4,5,6]
//实现深拷贝
/* let obj1 = { a: [1], b: 2 };
let obj2 = JSON.parse(JSON.stringify(obj1));
obj1.a.push(2);
console.log(obj1, obj2); */