天天看點

js中簡單資料類型和複雜資料類型在記憶體中的存儲方式

js資料類型在記憶體中的存儲方式

簡單資料類型(number, string, bool, undefined和null)

       簡單資料類型在記憶體中存在棧記憶體中,每個被聲明的簡單資料類型都有他自己的一塊記憶體空間。

       複雜資料類型在記憶體中的聲明存放在棧記憶體中,但是存放的是一個位址,這個位址指向堆記憶體,堆記憶體存的是複雜資料類型的資料。

畫圖解釋一下:

       var a=1;當我們聲明一個變量a時,會在棧内開辟一塊新記憶體存放這個聲明的變量和值。

js中簡單資料類型和複雜資料類型在記憶體中的存儲方式

當var a=2時,會将這塊記憶體的值改變。

js中簡單資料類型和複雜資料類型在記憶體中的存儲方式

如果var b=a時,會在棧裡面又會新開辟出一塊空間, 裡面存放的變量是b,值是a傳給他的。

js中簡單資料類型和複雜資料類型在記憶體中的存儲方式

是以兩個變量分别對應兩塊記憶體空間, 存儲的值是相同的, 是以, 當變量a發生改變時, 并不會影響到變量b所擁有的那塊記憶體空間, 是以變量b是不會改變的。

當var c={n:1},因為{n:1}是複雜資料類型,是以棧記憶體存的是c,資料存在堆記憶體中,c中存放的位址指向的是堆記憶體的資料。

js中簡單資料類型和複雜資料類型在記憶體中的存儲方式

當var c={n:2}時,會指向一個新的堆記憶體,而且就算是var c={n:1}也會新申請一塊堆記憶體位址,因為引用類型隻有位址相同才相同

js中簡單資料類型和複雜資料類型在記憶體中的存儲方式

****var b=a;引用類型互相指派之後,他們共用同一個空間,互相影響,一個值改變,另外一個值也會發生改變。

js中簡單資料類型和複雜資料類型在記憶體中的存儲方式