寫一個深度克隆函式

前端開膛手發表於2019-03-11

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

相關文章