深度拷貝(遞歸拷貝)

深度拷貝

拷貝出來的和被拷貝的沒有關(guān)系,即被拷貝的屬性改變,拷貝出來的屬性不會跟著改變。

// 深度拷貝 遞歸拷貝  (拷貝出來的和被拷貝的沒有關(guān)系)
function deepClone(value) {
  // null undefined直接返回 null == undefined是true,但是null == undefined是false
  if (value == null) return value; // 因為上面,所以這里只判斷null
  if (typeof value !== 'object') return value;  // 不是對象的有:Number、Boollean、Function
  if (value instanceof Date) return new Date(value);  // 如果是日期返回重新創(chuàng)建的日期
  if (value instanceof RegExp) return new RegExp(value);
  // 如果是對象或者數(shù)組
  let construc = new value.constructor(value);
  for (const key in value) {
    if (value.hasOwnProperty(key)) {
      construc[key] = deepClone(value[key]); // 如果是obj,那么繼續(xù)調(diào)用自己循環(huán),這就叫做遞歸拷貝
    }
  }
  return construc;
}
// console.log(new {}.constructor)  // {}.constructor = Object()  new Object() = {} 
console.log(deepClone([1,2,{a:{b:1,c:{d:function(){}}}}]))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,658評論 1 32
  • 工具:iPad pro + Apple pencilApp:procreate 繼續(xù)練習,熟悉筆刷,形成iPad畫...
    iheyi合一閱讀 196評論 0 0
  • 如果你喜歡看小說,熱愛文學,就關(guān)注我們【樂閱】lereader,【樂讀】leread。 昨天和幾個同事一起吃飯,吃...
    樂閱讀書閱讀 443評論 0 0
  • 下載好linux之后,配置安裝eclipse。 (1)下載jdk, apache(服務器),eclipse文件夾(...
    海納百川_4d26閱讀 351評論 0 0

友情鏈接更多精彩內(nèi)容