深淺拷貝

拷貝的定義
1.拷貝:復(fù)制、Ctrl+C、搞一份一樣的東西出來(lái)。
2.深拷貝:開辟一個(gè)新的空間,將原來(lái)的東西復(fù)制一份完完整整的進(jìn)去,就和備份類似,所以深拷貝修改一個(gè)對(duì)象不會(huì)影響另一個(gè)對(duì)象(深拷貝是在堆中申請(qǐng)新的空間來(lái)存儲(chǔ)拷貝的數(shù)據(jù),這樣就可以避免指針懸掛;指針懸掛:指針指向非法的內(nèi)存地址,也叫野指針,也就是正常使用的指針)
3.淺拷貝:淺拷貝分為兩種:

如果屬性為基本類型的拷貝,那么復(fù)制出來(lái)的就是基本類型的值;
如果屬性為引用類型的拷貝,那么復(fù)制的就是內(nèi)存地址;所以不管是拷貝還是被拷貝的一方改變了這個(gè)地址,都會(huì)影響到另一方

基本類型和引用類型
JS里面的幾種(數(shù)據(jù))類型分為:基本(數(shù)據(jù))類型和引用(數(shù)據(jù))類型;

基本(數(shù)據(jù))類型:Number、String、Boolean、Null、undefined、Symbol等基本上都存放在棧中。。
引用(數(shù)據(jù))類型:也就是Object type,比如Object、Array、Function、Data等,只有值存放在棧中,其他基本存放在堆中。

簡(jiǎn)單說(shuō)一下什么是堆什么是棧
1.堆和棧都是操作系統(tǒng)自帶的一個(gè)內(nèi)存空間;
2.棧是有系統(tǒng)自動(dòng)分配的內(nèi)存空間,棧空間里面存儲(chǔ)的是可以直接訪問(wèn)的;
3.堆是后期程序員可以開辟擴(kuò)大的,一般由程序員主動(dòng)分配才釋放;
4.棧優(yōu)點(diǎn):速度快;堆優(yōu)點(diǎn):內(nèi)存大;

你在什么時(shí)候使用過(guò)深拷貝/淺拷貝呢?
深拷貝:一般ES6里的新增語(yǔ)法都是深拷貝,深拷貝會(huì)找到復(fù)雜數(shù)據(jù)類型里面的元素的值來(lái)復(fù)制,比如說(shuō):遞歸、JSON(JSON.stringfy+JSON.parse)、lodash、、jQuery.extend()方法第一個(gè)參數(shù)要傳true、structuredClone
淺拷貝:復(fù)制在內(nèi)存中的引用地址,比如:剩余運(yùn)算符、Object.assign()、數(shù)組原型上的方法實(shí)現(xiàn)數(shù)組淺拷貝(Array.prototype.slice、Array.prototype.concat)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容