const deepCopy=(obj)=>{
//如果被克隆的是简单数据对象,没必要进行深度克隆
if(typeof obj!=='object'){
return;
}
//判断被克隆的是对象还是数组
let newObj=obj instanceof Array?[]:{};
//对每一个属性进行判断
for (let key in obj){
//只对自身的属性进行赋值
if(obj.hasOwnProperty(key)){
//如果该属性值也是对象,递归调用深度克隆方法
newObj[key]=typeof obj[key]==="object"?deepCopy(obj[key]):obj[key];
}
}
return newObj;
}
let a={
name:"123",
value:123
};
let b=deepCopy(a)
console.log(b);
复制代码
这种实现方式还存在很多问题:这种方式只能实现特定的object的深度复制(比如对象、数组和函数),不能实现null以及包装对象Number,String ,Boolean,以及Date对象,RegExp对象的复制。