ECMAscript變量包含兩種資料類型的值,分别是:基本類型值、引用類型值.
1.兩種值類型與資料類型的關系
基本類型:
(亦做原始類型)
簡單的資料段。
包含的資料類型有:Undefined、Null、Boolean、Number、String.
引用類型:
由多個值構成的對象。
包含的資料類型有:Array 、 Object 、 function 、Date 、RegExp.
2.兩種資料值類型與記憶體配置設定
JS記憶體空間分為棧(stack)、堆(heap)、池(一般會歸類為棧中)。棧記憶體有序排列,并且大小固定。堆記憶體無需排列,大小不固定。
(1).基本類型 :
基本類型值大小固定,變量值存放在棧記憶體中。
基本類型值初始化:當用var關鍵字聲明初始化一個變量之後,将變量名與一個棧記憶體位址綁定,并将變量的值存放在該位址的空間内。

基本類型值之間指派:當基本類型之間發生變量的指派操作時,會将棧空間中的值進行copy,并将該副本指派給另一個變量,存放在另一個變量名綁定的記憶體空間中。變量值改變不會互相影響。
基本類型值重指派(不可改變的原始值):如果對一個已經聲明了的變量重新指派,其實是切斷了該變量與記憶體位址之間的綁定聯系,将指針指向了新的棧空間,并将新值存在新空間内。之前位址就變成了野房間,野房間内的資料也不會憑空銷毀,直到下一次與變量綁定時,被變量值覆寫。
(2).引用類型:
引用類型由于可以修改,可以不管的擴充成員,是以它們的大小是無法确定的,會降低變量查尋的速度,是以無法放在棧記憶體中。是以要儲存一個引用類型,需要在堆記憶體中開辟一塊空間去儲存引用類型的資料。
引用類型值初始化:引用類型的值存放在堆中。變量名綁定的棧空間記憶體放的是一個指針,存放16進制的位址值,大小固定,是以存放在棧中,該位址就是變量值所在的堆位址。
引用類型值間指派:該指派不同與基本類型值之間的指派。當指派發生時,拷貝的依然是棧空間内的内容。但由于這是一個位址值,是以兩個引用類型變量所指的就是同一個堆空間。此時,變量值改變會互相影響。
通過函數方法對對象進行改變,例如數組的push(),splice()等方法,實際上也是通過指針尋址,并在原來的變量值上做修改,是以依然是會互相影響的。
引用類型值重指派:引用類型重指派,在堆中開辟了一個新房間,并将棧中指針指向了新的堆位址。此時,a、b變量值改變就不會互相影響了。
3.兩種資料值類型與記憶體通路機制
由于在記憶體中存放形式不同,是以兩種的對變量的通路機制也不同。
基本類型是按值通路,可以直接得到變量值。
引用類型則是按引用通路。在通路引用類型的值是先得到存該值的位址,再通過該位址得到變量值。