/**
* 深拷贝
* 1.注意判断类型
* 2.注意判断是数组还是对象
* 3.递归
*/
let obj1 = {
name: 'zhangsan',
address: {
city: '杭州',
},
friends: ['a', 'b'],
}
// let obj2 = obj1; // 浅拷贝
let obj2 = deepClone(obj1); // 深拷贝
obj2.address.city = '上海';
obj2.friends[1] = 'c';
console.log(obj1);
function(obj = {}) {
// 判断数据类型,null或值类型 直接返回
if(obj == null || typeof obj !== 'object') {
return obj;
}
let result;
// 引用类型,判断是数组还是对象
if(obj instanceof Array) {
result = [];
}else {
result = {};
}
for(let key in obj) {
// 要保证key不是原型的属性
if(obj.hasOwnProperty(key)) {
// 递归
result[key] = deepClone(obj[key])
}
}
return result;
}
|