// 为什么使用深拷贝:为了在改变新数组的时候,不影响原数组
function deepClone(obj){
// [ ] => Array (基类) { } => Object
var newObj = obj.constructor === Array ? [ ] : { }; //判断类型是数组还是对象(注意这里的Array不需要加引号)
for(let item in obj){
if(obj.hasOwnProperty(item)){ // 判断obj是否有当前属性
// item => 3(基本、对象、数组)
if(obj[item] && typeof obj[item] === 'object'){ // 引用数据类型
// 判断是数组或者对象(维护层代码可去掉)
// newObj[item] = obj[item].constructor === Array ? [] : {};
newObj[item] = deepClone(obj[item]) // 递归
} else{ // 基本数据类型
newObj[item] = obj[item] //直接赋值
}
}
}
return newObj;
}
let arr = [1,2,3,4]
let res = deepClone(arr)
res[0] = 100
console.log(arr, res)
console