1. 程式人生 > >JavaScript兩種資料型別的儲存方式

JavaScript兩種資料型別的儲存方式

JavaScript中資料型別的儲存

區別:

兩種型別的區別是:儲存位置不同

基本資料型別

原始資料型別是直接儲存在棧(stack)中的簡單資料段。因為佔據空間小、大小固定,屬於被頻繁使用資料,所以放入棧中儲存。

引用資料型別

引用資料型別儲存在堆(heap)中的物件,佔據空間大、大小不固定。如果儲存在棧中,將會影響程式執行的效能。

JavaScript中的引用資料型別有:

Array

Object

引用資料型別是儲存在堆記憶體中的,然後再棧記憶體中儲存一個對堆記憶體中實際物件的引用(棧記憶體中儲存了一個地址)。所以,JavaScript中對引用資料型別的操作都是操作物件的引用而不是實際的物件。 (這種說法不嚴密,當複製儲存著物件的某個標量時,操作的是物件的引用。但在為物件新增屬性時,操作的是實際的物件。)

複製變數值

除了儲存的方式不同之外,在從一個變數像另一個變數複製基本型別值和引用型別值是時,也存在不同。

基本資料型別

對於基本型別值,如果進行復制,會為新的變數在棧記憶體中分配一個新值。

引用資料型別

對於物件、陣列這樣的引用資料型別,如果進行復制,會為新的變數在棧記憶體中分配一個新值,但是這個值僅僅是一個地址。也就是說,複製出來的變數和原有的變數具有相同的地址,指向堆記憶體中的同一個物件。

為什麼基礎資料型別存在棧中,而引用資料型別存在堆中呢?

1.堆比棧空間大,棧比堆執行速度快。
2.堆記憶體是無序儲存,可以根據引用直接獲取。
3.基礎資料型別比較穩定,而且相對來說佔用的記憶體小。
4.引用資料型別大小是動態的,而且是無限的。