实现深拷贝笔记
const obj1 = {
age: 20,
address: {
city: '贵阳',
province: '贵州'
},
arr: ['大花花', '唧唧', '小玉米']
}
const obj2 = deepClone(obj1)
obj2.address.age="21"
obj2.address.city="北京"
// 若不进行深拷贝 ,让obj1 与obj2 指向不同的内存地址,则改变obj2 obj1也会被改变
console.log(obj1.age);//20
console.log(obj1.address.city);//贵阳
/**
* 深拷贝
*/
function deepClone(obj = {}) {
if (typeof obj !== 'object' || obj == null) return obj;//如果obj是null 或者不是对象和数组 不进行深拷贝直接返回传入值
//初始化返回结果
let result
if (obj instanceof Array) {
result = []
} else {
result = {}
}
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
//保证 key 不是原型(上级,上上级)上的属性
// 递归调用
result[key] = deepClone(obj[key])// 对象属性设置属性值的方法 obj["age"]=20 / obj.age=20
}
}
//返回结果
return result
}