关于深拷贝,它是将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象,且修改新对象不会影响原对象
// 到时候我们传值到函数里
function deepClone(obj) {
// 我们先判断声明一个对象或数组 如果是数组就是[] 如果不是数组就是{}
let objClone = Array.isArray(obj) ? [] : {}
// 判断obj是否是对象 []也是对象object
if (obj && typeof obj === "object") {
// 我们就循环对象或者数组
for (key in obj) {
// 判断obj是否存在key
if (obj.hasOwnProperty(key)) {
// 判断obj[key]是否为对象 如果是递归复制
if (obj[key] && typeof obj[key] === "object") {
objClone[key] = deepClone(obj[key])
} else {
// 如果不是对象 简单复制
objClone[key] = obj[key]
}
}
}
}
// 返回objClone
return objClone
}
let a = [1, 2, 3, 4]
b = deepClone(a)
a[0] = 2
console.log(a) //[2, 2, 3, 4]
console.log(b) //[1, 2, 3, 4]