1. 程式人生 > >JavaScript數據在內存中儲存方式

JavaScript數據在內存中儲存方式

tac null string 其中 num light 包括 變量 基本數據類型

詳情來源於個本人博客: https://shengchangwei.github.io/al-data/

> Js的數據類型包括兩種:

基本數據類型:String、Boolean、Number、undefined、null、Symbol

引用數據類型(復雜數據類型):Object

在內存中分為棧區(stack)和堆區(heap),基本數據類型存放在棧區,引用數據類型存放在堆區,

> 基本數據類型:

  1. 聲明一個變量a的時候,會在棧裏面開辟出一塊新的內存空間,用來存放這個變量a的值
  2. 當變量 a 儲存的數值發生改變時,棧區裏對應的那塊內存裏存的數據也會發生改變
  3. 再聲明一個變量b,並把變量a賦值給變量b,此時會在棧內開辟一個新空間用來儲存變量b。
  4. 這時變量a和變量b對應棧內存中兩個空間,修改其中一個不會影響到另一個。

技術分享圖片

> 復雜數據類型:

  1. 聲明一個對象var obj1 = {name: ‘sheng’}, 此時會在堆中開辟一塊空間存放obj1值{name: ‘sheng’}
  2. 在棧中開辟一個空間存放指向obj1值的指針,obj1通過這個指針可以拿到堆中的值
  3. 如果將obj1這個對象賦值給obj2時,此時其實賦值給obj2是棧中的指針,
  4. 那麽obj1和obj2通過相同的指針指向是同一個值,修改其中一個對象的值,會影響到另一個對象。
  5. 如果對obj1重新賦值的話,那麽這個對象會堆中的另一塊區域,不會在與obj2共享同一塊區域。

技術分享圖片

JavaScript數據在內存中儲存方式