const arr = [1,4,5,[6,7,8,{a:"a"}]];
// 浅拷贝
function clone(obj){
if(!obj ||typeof obj !=="object") return;//如果是空的,或者不是对象,则返回
// 根据obj的类型创建新对象的类型
let newObj = Array.isArray(obj)?[]:{};
// 遍历obj,并判断是obj的属性拷贝
for(let i in obj){
if(obj.hasOwnProperty(i)){
newObj[i]=obj[i];
}
};
return newObj;
}
// let arr1=clone(arr);
// arr1[0]=6;
// arr1[3][3].a=2;
// console.log(arr1);
// console.log(arr);
// 浅拷贝只拷贝对象的引用地址 因此两个对象公用同一个引用地址
// 实现深拷贝
function deepClone(obj){
// 判断是不是空或者不是对象 返回
if(!obj|| typeof obj !=="object") return;
//根据obj判断是对象还是数组
let newObj = Array.isArray(obj)?[]:{};
// 遍历obj 并且判断是否是自身属性 不查找原型属性
for(let i in obj){
if(obj.hasOwnProperty(i)){
newObj[i]= typeof obj[i] ==="object" ? deepClone(obj[i]):obj[i];
}
};
return newObj;
}
// 使用深拷贝
let arr2=deepClone(arr);
arr2[0]=8;
arr2[3][3].a=6;
console.log(arr);
console.log(arr2);
console