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物件的複製。