javascript-簡單數(shù)據(jù)類型和復(fù)雜數(shù)據(jù)類型的存儲和引用

JS中的簡單數(shù)據(jù)類型有 number, string, bool, undefined和null, 先來介紹一下簡單數(shù)據(jù)類型在內(nèi)存中是如何存儲的

當(dāng)我們聲明一個(gè)變量a的時(shí)候, 會在棧里面開辟出一塊新的內(nèi)存空間, 用來存放這個(gè)變量a的數(shù)值, 當(dāng)這個(gè)變量a存儲的數(shù)值發(fā)生改變時(shí), ??臻g里的對應(yīng)那塊內(nèi)存里的數(shù)據(jù)也會發(fā)生改變, 此時(shí)如果又聲明了一個(gè)變量b, 并把變量a賦值給變量b時(shí), 在棧里面又會新開辟出一塊空間, 用來存放變量b存儲的數(shù)值, 而這個(gè)數(shù)值, 是變量a傳遞給他的, 因此, 此時(shí)兩個(gè)變量分別對應(yīng)兩塊內(nèi)存空間, 存儲的值是相同的, 因此, 當(dāng)變量a發(fā)生改變時(shí), 并不會影響到變量b所擁有的那塊內(nèi)存空間, 所以變量b是不會改變的


1454596-20180920145429443-1135065063.png

JS中除了上述所說的簡單數(shù)據(jù)類型, 其他都是復(fù)雜數(shù)據(jù)類型, 復(fù)雜數(shù)據(jù)類型在聲明之后, 會在堆內(nèi)存中開辟出一塊空間, 用來存放數(shù)據(jù), 拿對象舉例, 在我們新建一個(gè)對象之后, 會在堆內(nèi)存中開辟一塊空間, 用來存放對象里的數(shù)據(jù), 而復(fù)雜數(shù)據(jù)類型跟簡單數(shù)據(jù)類型的不同點(diǎn)就是在于, 簡單數(shù)據(jù)類型的變量指向的是內(nèi)存中的數(shù)據(jù), 而復(fù)雜數(shù)據(jù)類型指向的是其在內(nèi)存中的地址,通過這個(gè)地址, 從而拿到地址中的數(shù)據(jù), 因此, 如果將一個(gè)對象賦值給另一個(gè)對象的時(shí)候, 其實(shí)是把這個(gè)對象在內(nèi)存空間中的地址傳遞給了另一個(gè)對象, 此時(shí), 他們共享內(nèi)存中的同一塊空間以及空間里的數(shù)據(jù), 如果對其中一個(gè)對象的一個(gè)屬性進(jìn)行修改的話, 那么因?yàn)閮蓚€(gè)對象是共享一塊地址一個(gè)數(shù)據(jù)的, 因此另一個(gè)對象中的屬性也會被改變. 如果對其中一個(gè)對象重新賦值的話, 那么這個(gè)對象就會指向另一塊內(nèi)存空間, 就不在與另一個(gè)對象共享同一塊內(nèi)存了

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

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,679評論 1 32
  • 最全的iOS面試題及答案 iOS面試小貼士 ———————————————回答好下面的足夠了-----------...
    zweic閱讀 2,804評論 0 73
  • __block和__weak修飾符的區(qū)別其實(shí)是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,599評論 0 6
  • 一、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡單分配策略的問題地址空間不隔離內(nèi)存使用效率低程序運(yùn)行的地址不確定 關(guān)于...
    SeanCST閱讀 8,139評論 0 27
  • 記得奶奶跟我講,她跟爺爺?shù)牡谝淮渭s會 奶奶說:“我吃了他的桂花糕,怎么能不嫁他?!?爺爺說:“我不小心碰到了她的腰...
    一只小阿悅i閱讀 557評論 0 3

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