在JavaScript中,淺拷貝只是複製了原始資料的記憶體位址,相當於兩個資料指標指向了相同的位址,任一資料元素改變,會影響另一個;而深拷貝的兩個資料指向了不同的位址,任一個元素改變,不會影響另一個。
本教學操作環境:windows10系統、javascript1.8.5版、Dell G3電腦。
javascript深拷貝和淺拷貝的區別是什麼
在探究淺拷貝和深拷貝之前,先來了解下堆和棧的概念
堆和棧都是記憶體中劃分出來用於儲存的區域。堆疊(stack)為自動分配的記憶體空間,它由系統自動釋放;堆(heap)則是動態分配的內存,大小不定也不會自動釋放。
接著看下基本資料型別 & 引用資料型別(又稱為複雜資料型別)
1、基本型別:String、Number、Boolean、null、undefined、Symbol(ES6新增,表示獨一無二的值);基本型別值在記憶體中佔固定大小,保存在堆疊記憶體中。
2、參考類型:Object、Array、Date、Function等;引用類型的值是對象,保存在堆記憶體中。
深淺拷貝的概念
註:深淺拷貝的區別只適用於Array與Object這樣的複雜物件。
1、淺拷貝:只是複製了原始資料的記憶體位址,相當於兩個資料指標指向了相同的位址,其中任一資料元素改變,會影響另一個。
2、深拷貝:兩個資料指向了不同的位址,資料元素改變時不會互相影響。
實例探究
1、淺拷貝
var arr = [0, 1, 2]; var arrB; //把arr赋值给arrB arrB = arr; console.log("arr:", arr); console.log("arrB:", arrB); console.log("-----------改变arrB中数组元素的值后-----------"); arrB[0] = 5; console.log("arr:", arr); console.log("arrB:", arrB);
運行結果:arr數組元素隨arrB數組元素的改變而改變
2、深拷貝(只做第一層深拷貝)
註:在使用深拷貝的時候,一定要弄清楚對深拷貝的要求程度,是僅深拷貝第一層級的物件屬性或是數組元素,還是遞歸拷貝所有層級的物件屬性和陣列元素?
深拷貝數組
①. 直接遍歷
var arr = [1, 2, 3, 4]; function copy(arr){ var newArr = []; for(var i=0;i<arr.length;i++){ newArr.push(arr[i]); } return newArr; } var arrB = copy(arr); console.log("arrB:", arrB); console.log("-----------改变arrB中数组元素的值后-----------"); arrB[0] = 5; console.log("arr:", arr); console.log("arrB:", arrB);
運行結果:arrB數組元素改變並未影響arr數組元素的值
②. concat ():用於連接兩個或多個陣列。此方法不會改變現有數組,僅只會傳回被連接數組的一個副本。
var arr = [0, 1, 2]; var arrB; //把arr赋值给arrB arrB = arr.concat(); console.log("arr:", arr); console.log("arrB:", arrB); console.log("-----------改变arrB中数组元素的值后-----------"); arrB[0] = 5; console.log("arr:", arr); console.log("arrB:", arrB);
運行結果:arr數組元素未隨arrB數組元素的改變而改變
③. slice():此方法傳回一個從現有的陣列中截取一部分元素片段組成新的數組(不改變原數組)。
var arr = [0, 1, 2, 4, 5]; var arrB; //把arr赋值给arrB arrB = arr.slice(); console.log("arr:", arr); console.log("arrB:", arrB); console.log("-----------改变arrB中数组元素的值后-----------"); arrB[0] = 10; arr[4] = 8; console.log("arr:", arr); console.log("arrB:", arrB);
運行結果:數組中元素改變並不會互相影響
以上三種方法只針對於數組元素是基本資料類型的簡單數組,對於第一級數組元素是對象或者數組等引用類型變數的陣列來說,上述方法都會失效。
相關推薦:javascript學習教學
以上是javascript深拷貝和淺拷貝的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

No,youshouldn'tusemultipleIDsinthesameDOM.1)IDsmustbeuniqueperHTMLspecification,andusingduplicatescancauseinconsistentbrowserbehavior.2)Useclassesforstylingmultipleelements,attributeselectorsfortargetingbyattributes,anddescendantselectorsforstructure

html5aimstoenhancewebcapabilities,Makeitmoredynamic,互動,可及可訪問。 1)ITSupportsMultimediaElementsLikeAnd,消除innewingtheneedtheneedtheneedforplugins.2)SemanticeLelelemeneLementelementsimproveaCceccessibility inmproveAccessibility andcoderabilitile andcoderability.3)emply.3)lighteppoperable popperappoperable -poseive weepivewebappll

html5aimstoenhancewebdevelopmentanduserexperiencethroughsemantstructure,多媒體綜合和performanceimprovements.1)SemanticeLementLike like,和ImproVereAdiability and ImproVereAdabilityActibility.2)and tagsallowsemlessallowseamelesseamlessallowseamelesseamlesseamelesseamemelessmultimedimeDiaiaembediiaembedplugins.3)。 3)3)

html5isnotinerysecure,butitsfeaturescanleadtosecurityrisksifmissusedorimproperlyimplempled.1)usethesand andboxattributeIniframestoconoconoconoContoContoContoContoContoconToconToconToconToconToconTedContDedContentContentPrenerabilnerabilityLikeClickLickLickLickjAckJackJacking.2)

HTML5aimedtoenhancewebdevelopmentbyintroducingsemanticelements,nativemultimediasupport,improvedformelements,andofflinecapabilities,contrastingwiththelimitationsofHTML4andXHTML.1)Itintroducedsemantictagslike,,,improvingstructureandSEO.2)Nativeaudioand

使用ID選擇器在CSS中並非固有地不好,但應謹慎使用。 1)ID選擇器適用於唯一元素或JavaScript鉤子。 2)對於一般樣式,應使用類選擇器,因為它們更靈活和可維護。通過平衡ID和類的使用,可以實現更robust和efficient的CSS架構。

html5'sgoalsin2024focusonrefinement和optimization,notNewFeatures.1)增強performanceandeffipedroptimizedRendering.2)inviveAccessibilitywithRefinedwithRefinedTributesAndEllements.3)explityconcerns,尤其是withercercern.4.4)

html5aimedtotoimprovewebdevelopmentInfourKeyAreas:1)多中心供應,2)語義結構,3)formcapabilities.1)offlineandstorageoptions.1)html5intoryements html5introctosements introdements and toctosements and toctosements,簡化了inifyingmediaembedingmediabbeddingingandenhangingusexperience.2)newsements.2)


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。