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
摘要:上一篇你不知道的筆記寫在前面這是年第一篇博客,回顧去年年初列的學(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)定、...
摘要:一篇文章徹底說清的深拷貝淺拷貝這篇文章的受眾第一類業(yè)務(wù)需要急需知道如何深拷貝對(duì)象的開發(fā)者。這篇文章分享的目的更多還是希望用一篇文章整理清楚深淺拷貝的含義遞歸實(shí)現(xiàn)思路以及小伙伴們?nèi)绻褂昧诉@種黑科技一定要清楚這樣寫的優(yōu)缺點(diǎn)。 一篇文章徹底說清JS的深拷貝and淺拷貝 這篇文章的受眾 第一類,業(yè)務(wù)需要,急需知道如何深拷貝JS對(duì)象的開發(fā)者。 第二類,希望扎實(shí)JS基礎(chǔ),將來好去面試官前秀操作...
摘要:一篇文章徹底說清的深拷貝淺拷貝這篇文章的受眾第一類業(yè)務(wù)需要急需知道如何深拷貝對(duì)象的開發(fā)者。這篇文章分享的目的更多還是希望用一篇文章整理清楚深淺拷貝的含義遞歸實(shí)現(xiàn)思路以及小伙伴們?nèi)绻褂昧诉@種黑科技一定要清楚這樣寫的優(yōu)缺點(diǎn)。 一篇文章徹底說清JS的深拷貝and淺拷貝 這篇文章的受眾 第一類,業(yè)務(wù)需要,急需知道如何深拷貝JS對(duì)象的開發(fā)者。 第二類,希望扎實(shí)JS基礎(chǔ),將來好去面試官前秀操作...
摘要:一篇文章徹底說清的深拷貝淺拷貝這篇文章的受眾第一類業(yè)務(wù)需要急需知道如何深拷貝對(duì)象的開發(fā)者。這篇文章分享的目的更多還是希望用一篇文章整理清楚深淺拷貝的含義遞歸實(shí)現(xiàn)思路以及小伙伴們?nèi)绻褂昧诉@種黑科技一定要清楚這樣寫的優(yōu)缺點(diǎn)。 一篇文章徹底說清JS的深拷貝and淺拷貝 這篇文章的受眾 第一類,業(yè)務(wù)需要,急需知道如何深拷貝JS對(duì)象的開發(fā)者。 第二類,希望扎實(shí)JS基礎(chǔ),將來好去面試官前秀操作...
閱讀 3083·2021-11-24 10:34
閱讀 3339·2021-11-22 13:53
閱讀 2643·2021-11-22 12:03
閱讀 3612·2021-09-26 09:47
閱讀 3020·2021-09-23 11:21
閱讀 4825·2021-09-22 15:08
閱讀 3308·2021-07-23 10:59
閱讀 1271·2019-08-29 18:31