久久无码中文字幕_日韩精品无码一本二本三_久久精品呦女暗网_欧美一级夜夜爽_久久精品国产99久久99久久久

15
2023/09

深拷貝淺拷貝的介紹及其實現(xiàn)方式

發(fā)布時間:2023-09-15 16:32:57
發(fā)布者:MaiMai
瀏覽量:
0

上一章我們利用JSON.stringify()與JSON.parse()方法實現(xiàn)了深拷貝,但是這種方法存在很多弊端,如對象的屬性值是函數(shù)時,無法拷貝;不能解決循環(huán)引用的問題;無法拷貝特殊對象,比如:RegExp、BigInt、Date、Set、Map等。這一章我們來詳細介紹一下深拷貝與淺拷貝。

首先要知道,js中數(shù)據(jù)類型分為基本數(shù)據(jù)類型 (Number, String, Boolean, Null, Undefined, Symbol)和對象數(shù)據(jù)類型 ( Object ),像 Array、Function、Date...等都屬于 Object,它們的值都是對象。

引用數(shù)據(jù)型在被創(chuàng)建時,首先要在棧上給其引用分配一塊內(nèi)存,而對象的具體信息都存儲在堆內(nèi)存上,然后由棧上面的引用指向堆中對象的地址。當(dāng)尋找引用值時,解釋器會先尋找棧中的地址。然后根據(jù)地址找到堆內(nèi)存的實體。

淺拷貝是會將對象的每個屬性進行依次復(fù)制,但是當(dāng)對象的屬性值是引用類型時,實質(zhì)復(fù)制的是其引用,當(dāng)引用指向的值改變時也會跟著變化。而深拷貝則是層層拷貝,會另外創(chuàng)造一個一模一樣的對象,新對象跟原對象不共享內(nèi)存。我們常用的拷貝數(shù)組的方法,如concat()、slice()、Array.from(),都是淺拷貝,除此之外,數(shù)組的其他方法如map()、filter()、reduce(),都是會造成淺拷貝的。

要實現(xiàn)淺拷貝,可以利用Object.assign方法或for in方法。

Object.assign方法

for in方法

而上一章提到的實現(xiàn)深拷貝的方法,除了利用JSON.stringify()與JSON.parse()方法外,最好的辦法是利用遞歸實現(xiàn)??梢越鉀QJSON方法所遺留的弊端。

遞歸實現(xiàn)深拷貝

關(guān)鍵詞:
返回列表