Reference type以及Value type
在Javascript程式語言,Reference Type和Value Type是兩種不同的資料型別,它們在記憶體中的儲存和操作方式不相同。
Value Type
儲存的是數據本身
資料存放於Stack
Value type變數,這個變數會儲存數據本身
Value type有以下資料型態
- number(包括整數、浮點數)
- string
- boolean
- undefined
- null
- symbol
當將一個Value type變數賦值給另一個變數時,將複製實際的數據
用Javascript舉例子
1 | let a = 10 |
Reference Type
儲存的是記憶體位置
資料存放於Heap
Reference type有以下資料型態
- object(包括class)
- function
- array
當一個reference type的變數賦值給另一個變數時,它們將指向同樣的記憶體位置
用Javascript舉例子
1 | let a = [1,2,3] |
這個例子中
變數a是array陣列,變數a屬於reference type,儲存的是記憶體位置
a賦值給b,它們兩個變數指向同一個記憶體位置
變數b加進7之後
最終,a和b指向的記憶體位置的數值變成[1,2,3,7]
另外
我們可以用”比較運算符”去測試
=== 值和類型這2個是否完全相等
== 值是否相等
1 | let c = [4,5] |
這個例子中,為什麼c怎麼樣都不等於d?
由於array陣列是Reference Type
===和==變成比較的是記憶體位置
c的記憶體位置和d的記憶體位置完全不同
所以都是false
除非改成以下程式碼
1 | let c = [4,5] |
將變數c賦值給變數d,它們指向同一個記憶體位置