深拷贝:在堆内存中创建一个新空间,完全克隆相同的对象
浅拷贝:只对对象或者数组的第一层进行拷贝,其他层级拷贝的是其栈中的内存地址
function deepClone(obj) {
// 判读是数组还是对象
let cloneObj = Array.isArray(obj) ? [] : {}
// obj判断是undefined还是null
if (obj && typeof obj == 'object') {
for (let key in obj) {
// 过滤原型链上可枚举的属性
if (obj.hasOwnProperty(key)) {
// 如果子对象还是对象说明还是要深拷贝
if (obj[key] && typeof obj[key] == 'object') {
cloneObj[key] = deepClone(obj[key])
} else {
cloneObj[key] = obj[key]
}
}
}
}
return cloneObj
}