步骤:
拿到参数 判断是不是对象或者不是null
判断要拷贝的类型是对象还是数组
遍历对象,注意:for in会遍历原型链上的属性 因此要二次判断
属性还是对象要递归 不是直接返回
代码:
const deepCopy = (obj) => {
if(obj === null || typeof obj !== 'object' ) return obj;
let newObj = Array.isArray(obj) ? [] : {};
for(let key in obj){
if(obj.hasOwnProperty(key)){
if(typeof obj[key] === 'object'){
newObj[key] = deepCopy(obj[key]);
}else{
newObj[key] = obj[key];
}
}
}
return newObj;
};
const a ={
name:'zhangsan',
arr:[1,2,3,4],
obj:{
name:{name:'lisi'},
age:18
}
}
const b = deepCopy(a);
b.obj.name.name = 'wangwu';
console.log(deepCopy(a));
console.log(deepCopy(b))