所謂「原始資料類型」,指的是該筆資料「確實」持有某個值,不會被更改;而「參考資料類型」,則只是「參考」記憶體中某位置的值,如果記憶體中的值被更改,就會連帶影響所有相關資料。
原始資料類型(primitive data type)
JavaScript 中共有 Number、String、BigInt、Boolean、Null、undefined、Symbol 七種原始資料類型。
以 Number 為例,下列程式碼的輸出結果是什麼呢?
let num1 = 5;
let num2 = num1;
num1 += 6;
console.log(num2);
正確答案是 5。
num1 新的操作並不影響 num2 的結果,這是因為存取 num2 的值時,num2 自己便已經持有 5 這個數值,num1 怎麼變化都跟 num2 無關。
參考資料類型(reference data type)
除了上述七種之外的資料類型都屬「參考資料類型」,較常見的有物件、函數(也是一種物件)、陣列(依然是一種物件)等,若以陣列呈現類似上述範例的程式碼如下:
let arr1 = [1,2,3];
let arr2 = arr1;
arr1.push(4);
console.log(arr2);
顯示的結果變成[1,2,3,4]。
雖然操作的是 arr1,但因為 arr2 跟 arr1 讀取的是同一個記憶體位置,arr1 被更改也會連帶影響 arr2。
同樣地,如果更改 arr2 也會影響 arr1:
let arr1 = [1,2,3];
let arr2 = arr1;
arr2.push(5);
console.log(arr1); //[1,2,3,5]