如何實(shí)現(xiàn)數(shù)組的深拷貝和淺拷貝
目錄
1.背景介紹
2.知識剖析
3.常見問題
4.解決方案
5.編碼實(shí)戰(zhàn)
6.擴(kuò)展思考
7.參考文獻(xiàn)
8.更多討論
1.背景介紹
在使用JavaScript對數(shù)組進(jìn)行操作的時候芯义,我們經(jīng)常需要將數(shù)組進(jìn)行備份. 如下代碼艳吠,如果只是簡單才用賦值的方法穗椅,那么我們只要更改其中的任何一個,然后其他的也會跟著改變经窖,這就導(dǎo)致了問題的發(fā)生
var arr1 = ["red","yellow","black"]; var arr2 = arr1; arr2[1] = "green"; console.log("數(shù)組的原始值:" + arr1 ); console.log("數(shù)組的新值:"
+ arr2);
像上面的這種直接賦值的方式就是數(shù)組的淺拷貝,淺拷貝改變其中一個數(shù)組窗骑,另外一個數(shù)組也會跟著改變枷遂。很多時候,這不是我們想要的竞川。
2.知識剖析
1.什么是深拷貝和淺拷貝?
淺拷貝:復(fù)制一份引用店溢,所有引用對象都指向一份數(shù)據(jù)叁熔,并且都可以修改這份數(shù)據(jù)。 深拷貝(復(fù)雜):復(fù)制變量值逞怨,對于非基本類型的變量者疤,則遞歸至基本類型變量后福澡,再復(fù)制叠赦。可以使用slice和concat方法革砸。
2.slice和concat使用方法
start:必需除秀。規(guī)定從何處開始選取。如果是負(fù)數(shù)算利,那么它規(guī)定從數(shù)組尾部開始算起的位置册踩。也就是說,-1 指最后一個元素效拭,-2 指倒數(shù)第二個元素暂吉,以此類推。 end:可選缎患。規(guī)定從何處結(jié)束選取慕的。該參數(shù)是數(shù)組片斷結(jié)束處的數(shù)組下標(biāo)。如果沒有指定該參數(shù)挤渔,那么切分的數(shù)組包含從
? ? ? ? ? ? ? ? start 到數(shù)組結(jié)束的所有元素肮街。如果這個參數(shù)是負(fù)數(shù),那么它規(guī)定的是從數(shù)組尾部開始算起的元素判导。 返回值:返回一個新的數(shù)組嫉父,包含從 start 到 end (不包括該元素)的 arrayObject 中的元素(如果 end 未被規(guī)定,那么 slice()
? ? ? ? ? ? ? ? 方法會選取從 start 到數(shù)組結(jié)尾的所有元素)眼刃。
concat(): concat() 方法用于連接兩個或多個數(shù)組绕辖。 該方法不會改變現(xiàn)有的數(shù)組,而僅僅會返回被連接數(shù)組的一個副本擂红。 語法:arrayObject.concat(arrayX,arrayX,......,arrayX) 返回一個新的數(shù)組仪际。該數(shù)組是通過把所有
? ? ? ? ? ? arrayX 參數(shù)添加到 arrayObject 中生成的。如果要進(jìn)行 concat() 操作的參 數(shù)是數(shù)組篮条,那么添加的是數(shù)組中的元素弟头,而不是數(shù)組。 arrayX:必需涉茧。該參數(shù)可以是具體的值赴恨,也可以是數(shù)組對象“樗ǎ可以是任意多個伦连。
3.常見問題
jquery如何實(shí)現(xiàn)深拷貝雨饺?
4.解決方案
jQuery.extend()
5.編碼實(shí)戰(zhàn)
6.擴(kuò)展思考
對象的深拷貝 原生js對象的淺拷貝和深拷貝的總結(jié)
7.參考文獻(xiàn)
參考一:JavaScript數(shù)組深拷貝和淺拷貝的兩種方法 參考二:原生js對象的淺拷貝和深拷貝的總結(jié)
8.更多討論
深拷貝的應(yīng)用場景!
鳴謝
感謝大家觀看
今天的分享就到這里啦惑淳,歡迎大家點(diǎn)贊额港、轉(zhuǎn)發(fā)、留言歧焦、拍磚~
技能樹.IT修真院???
? “我們相信人人都可以成為一個工程師移斩,現(xiàn)在開始,找個師兄绢馍,帶你入門向瓷,掌控自己學(xué)習(xí)的節(jié)奏,學(xué)習(xí)的路上不再迷媒⒂浚”猖任。
? ?這里是技能樹.IT修真院,成千上萬的師兄在這里找到了自己的學(xué)習(xí)路線瓷耙,學(xué)習(xí)透明化朱躺,成長可見化,師兄1對1免費(fèi)指導(dǎo)搁痛。
? ?快來與我一起學(xué)習(xí)吧~http://www.jnshu.com/login/1/21109035