成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript對象復制理解

fjcgreat / 1360人閱讀

摘要:最近在研究對象的深拷貝,下面是我試驗的兩種方法,一種是通過和的方法實現(xiàn)的深拷貝,一種是通過遞歸函數(shù)實現(xiàn)的深拷貝。

最近在研究js對象的深拷貝,下面是我試驗的兩種方法,一種是通過JSON.stringify和JSON.parse的方法實現(xiàn)的深拷貝,一種是通過遞歸函數(shù)實現(xiàn)的深拷貝。

此處有個問題,第二種方法實現(xiàn)了對象方法的拷貝,但是不是深拷貝,網(wǎng)上找了很久都沒有找到實現(xiàn)對象的方法深拷貝的方法,希望有大神能給點建議。

let obj = {
  a: 1,
  b: "2",
  c: {
    c1: 1
  },
  d: function () {
    console.log("d");
  },
  e: [1, 2, 3]
};
//使用JSON.parse和JSON.stringify的方法是深拷貝,除了function,其他的都能拷貝
let obj_copy1 = JSON.parse(JSON.stringify(obj));
console.log(obj_copy1);
console.log(obj.c === obj_copy1.c); //結果是false,對象是深拷貝

// 使用遞歸的方法復制,function可以復制,除了function是淺拷貝,其他的都是深拷貝
function clone(obj) {
  let new_obj = {};
  for(let key in obj) {
    let t = ( typeof obj[key] ).toLowerCase();
    if (t === "object") {
      if(obj[key] instanceof Array) {
        var new_arr = [];
        for(let item of obj[key]) {
          new_arr.push(item);
        }
        new_obj[key] = new_arr;
      } else {
        new_obj[key] = clone(obj[key]);
      }
    } else {
      new_obj[key] = obj[key];
    }
  }
  return new_obj;
}

let obj_copy2 = clone(obj);
console.log(obj_copy2);
console.log(obj.c === obj_copy2.c); //結果是false,對象是深拷貝
console.log(obj.d === obj_copy2.d); //結果是true,function不是深拷貝

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/101317.html

相關文章

  • 談談javascript語法里一些難點問題(一)

    摘要:引子前不久我建立的技術群里一位問了一個這樣的問題,她貼出的代碼如下所示執(zhí)行結果如下所示第一個第二個這是一個令人詫異的結果,為什么第一個彈出框顯示的是,而不是呢這種疑惑的原理我描述如下一個頁面里直接定義在標簽下的變量是全局變量即屬于對象的變量 1) 引子 前不久我建立的技術群里一位MM問了一個這樣的問題,她貼出的代碼如下所示: var a = 1; function hehe...

    huaixiaoz 評論0 收藏0
  • 體驗javascript之美-第五課 匿名函數(shù)自執(zhí)行和閉包是一回事兒嗎?

    摘要:大家想想怎么做什么是匿名函數(shù)自執(zhí)行并如何在實際庫中應用匿名函數(shù)自執(zhí)行,注意,注意,只有這個名字和沒有其它名字,比如封閉空間,這個是為了讓大家好理解自己造的詞語。 通過本節(jié)課你將學到: 1.什么是函數(shù)表達式和函數(shù)聲明 2.first-class function 3.引用和復制的區(qū)別 4.函數(shù)傳參是怎么回事兒 5.關于函數(shù)的this和arguments 6.什么是匿名函數(shù)自執(zhí)行并如何在...

    _Suqin 評論0 收藏0
  • 前端基礎進階(一):內(nèi)存空間詳細圖解

    摘要:一棧數(shù)據(jù)結構與不同,中并沒有嚴格意義上區(qū)分棧內(nèi)存與堆內(nèi)存。引用數(shù)據(jù)類型的值是保存在堆內(nèi)存中的對象。不允許直接訪問堆內(nèi)存中的位置,因此我們不能直接操作對象的堆內(nèi)存空間。為了更好的搞懂變量對象與堆內(nèi)存,我們可以結合以下例子與圖解進行理解。 showImg(https://segmentfault.com/img/remote/1460000009784102?w=1240&h=683); ...

    _Suqin 評論0 收藏0
  • JavaScript參數(shù)按值傳遞的理解

    摘要:棧內(nèi)存與堆內(nèi)存簡單類型的值,它們的值直接存儲在變量訪問的位置,這是因為這些簡單類型占據(jù)的空間是固定的,所以可將他們存儲在較小的內(nèi)存區(qū)域棧中。 看到一個這樣的問題 function setName(obj) { obj.name = Tom; obj = new Object(); obj.name = Greg ; } var person = new Object();...

    galois 評論0 收藏0
  • JavaScript參數(shù)按值傳遞的理解

    摘要:棧內(nèi)存與堆內(nèi)存簡單類型的值,它們的值直接存儲在變量訪問的位置,這是因為這些簡單類型占據(jù)的空間是固定的,所以可將他們存儲在較小的內(nèi)存區(qū)域棧中。 看到一個這樣的問題 function setName(obj) { obj.name = Tom; obj = new Object(); obj.name = Greg ; } var person = new Object();...

    NeverSayNever 評論0 收藏0

發(fā)表評論

0條評論

fjcgreat

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<