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

資訊專欄INFORMATION COLUMN

深拷貝&淺拷貝

JessYanCoding / 2597人閱讀

github源碼:https://github.com/fypShirley...

看下面的示例了解賦值和引用的區(qū)別:
賦值:
    var a = 5;
    var b = a;
    b+=3;
    
    console.log(b)//8
    console.log(a)//5 原值沒有發(fā)生改變

引用:(對(duì)象和函數(shù)都是引用的關(guān)系)
    var a = [1,2,3];
    var b = a;
    var c = a;
    b.push(4);
    
    console.log(b);//[1,2,3,4]
    console.log(a);//[1,2,3,4] a被影響
    
    c = [1,2,3,4,5];
    console.log(c);//[1,2,3,4,5]
    console.log(a);//[1,2,3,4] a不受影響
    
淺拷貝:
   var obj0= {a:10};
   var obj1= {a:{b:10}};
   
   function copy(obj){//淺拷貝
       var newObj = {};

       for(var attr in obj){
           newObj[attr] = obj[attr];
       }
       return newObj;
   }
   
    var obj2 = copy(obj0);
    var obj3 = copy(obj1);
    obj3.a.b = 20;
    
    console.log(obj0.a);//10 a不受影響
    console.log(obj1.a.b);//20 受影響了,還是引用
    
深拷貝:
先看一個(gè)遞歸 :
 function test(n){
    if(n == 1){
        console.trace()
        return 1;
    }
    return n*test(n-1);
}
console.log(test(4))//1*2*3*4 -> 24
深拷貝利用遞歸的思想:
function deepCopy(obj){//一層層進(jìn)入,拿到值
   if(typeof obj != "object"){
       return obj;
   }
   console.trace();
   var newObj = {};

   for(var attr in obj){
       newObj[attr] = deepCopy(obj[attr]);//遞歸
   }
   return newObj;
 }
 var obj4= {a:{b:10}};
 var obj5 = deepCopy(obj4);
 obj5.a.b = 20;
 console.log(obj4.a);//a->{b:10},原數(shù)據(jù)沒有改變
 console.log(obj5.a);//a->{b:20},
 
再一個(gè)深/淺拷貝的對(duì)比
 //先聲明一個(gè)對(duì)象parent:

 var parent = {
   numbers: [1, 2, 3],
   letters: ["a", "b", "c"],
   obj: {prop: 1   },
   bool: true
};

// 淺拷貝函數(shù):
function extendCopy(p) {//傳地址
   var c = {};
   for (var i in p) {
       c[i] = p[i];
   }
   c.uber = p;
   return c;
}


// 深拷貝函數(shù):
function deepCopy(p, c) {//傳值
//在拷貝每個(gè)屬性之前,建議使用 hasOwnProperty()來確認(rèn)不會(huì)誤拷貝不需要的繼承屬性。
   c = c || {};
   for (var i in p) {
       //console.log(p.hasOwnProperty(i))
       if (p.hasOwnProperty(i)) {
           if (typeof p[i] === "object") {
               c[i] = Array.isArray(p[i]) ? [] : {};
               deepCopy(p[i], c[i]);
           } else {
               c[i] = p[i];
           }
       }
   }
   return c;
}

var mydeep = deepCopy(parent);
mydeep.numbers.push(5);
console.log(mydeep.numbers)//[1,2,3,5]
console.log(parent.numbers)//[1,2,3]原數(shù)據(jù)沒有改變

myshallow.numbers.push(6);
console.log(myshallow.numbers)//[1,2,3,6]
console.log(parent.numbers)//[1,2,3,6原數(shù)據(jù)改變
console.log(mydeep.numbers)//[1,2,3]

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/92749.html

相關(guān)文章

  • 《你不知道的javascript》筆記_對(duì)象&原型

    摘要:上一篇你不知道的筆記寫在前面這是年第一篇博客,回顧去年年初列的學(xué)習(xí)清單,發(fā)現(xiàn)僅有部分完成了。當(dāng)然,這并不影響年是向上的一年在新的城市穩(wěn)定連續(xù)堅(jiān)持健身三個(gè)月早睡早起游戲時(shí)間大大縮減,學(xué)會(huì)生活。 上一篇:《你不知道的javascript》筆記_this 寫在前面 這是2019年第一篇博客,回顧去年年初列的學(xué)習(xí)清單,發(fā)現(xiàn)僅有部分完成了。當(dāng)然,這并不影響2018年是向上的一年:在新的城市穩(wěn)定、...

    seasonley 評(píng)論0 收藏0
  • 一篇文章徹底說清JS的拷貝/拷貝

    摘要:一篇文章徹底說清的深拷貝淺拷貝這篇文章的受眾第一類業(yè)務(wù)需要急需知道如何深拷貝對(duì)象的開發(fā)者。這篇文章分享的目的更多還是希望用一篇文章整理清楚深淺拷貝的含義遞歸實(shí)現(xiàn)思路以及小伙伴們?nèi)绻褂昧诉@種黑科技一定要清楚這樣寫的優(yōu)缺點(diǎn)。 一篇文章徹底說清JS的深拷貝and淺拷貝 這篇文章的受眾 第一類,業(yè)務(wù)需要,急需知道如何深拷貝JS對(duì)象的開發(fā)者。 第二類,希望扎實(shí)JS基礎(chǔ),將來好去面試官前秀操作...

    J4ck_Chan 評(píng)論0 收藏0
  • 一篇文章徹底說清JS的拷貝/拷貝

    摘要:一篇文章徹底說清的深拷貝淺拷貝這篇文章的受眾第一類業(yè)務(wù)需要急需知道如何深拷貝對(duì)象的開發(fā)者。這篇文章分享的目的更多還是希望用一篇文章整理清楚深淺拷貝的含義遞歸實(shí)現(xiàn)思路以及小伙伴們?nèi)绻褂昧诉@種黑科技一定要清楚這樣寫的優(yōu)缺點(diǎn)。 一篇文章徹底說清JS的深拷貝and淺拷貝 這篇文章的受眾 第一類,業(yè)務(wù)需要,急需知道如何深拷貝JS對(duì)象的開發(fā)者。 第二類,希望扎實(shí)JS基礎(chǔ),將來好去面試官前秀操作...

    lakeside 評(píng)論0 收藏0
  • 一篇文章徹底說清JS的拷貝/拷貝

    摘要:一篇文章徹底說清的深拷貝淺拷貝這篇文章的受眾第一類業(yè)務(wù)需要急需知道如何深拷貝對(duì)象的開發(fā)者。這篇文章分享的目的更多還是希望用一篇文章整理清楚深淺拷貝的含義遞歸實(shí)現(xiàn)思路以及小伙伴們?nèi)绻褂昧诉@種黑科技一定要清楚這樣寫的優(yōu)缺點(diǎn)。 一篇文章徹底說清JS的深拷貝and淺拷貝 這篇文章的受眾 第一類,業(yè)務(wù)需要,急需知道如何深拷貝JS對(duì)象的開發(fā)者。 第二類,希望扎實(shí)JS基礎(chǔ),將來好去面試官前秀操作...

    big_cat 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<