Javascript的參考型別

在 JavaScript 中,資料型別(Data Types) 可以分為兩大類:


✅ 1. 值型別(Primitive Types)

  • 也稱「原始型別」,儲存的是值本身
  • 資料在記憶體中直接存儲值
  • 複製時是複製值(值拷貝)
型別 範例
string 'hello'
number 42
boolean true / false
undefined undefined
null null
symbol Symbol()
bigint 10n

✅ 2. 參考型別(Reference Types)

  • 儲存的是資料的「記憶體位址(reference)」
  • 資料實體存在記憶體堆(heap)中
  • 複製的是記憶體位址(引用拷貝)
  • 多個變數可指向同一份資料,修改一處其他處也會變

📦 常見的參考型別:

型別 範例
Object { name: 'Tom' }
Array [1, 2, 3]
Function function() {}
Date new Date()
RegExp /abc/
Map new Map()
Set new Set()
其他物件型別 WeakMapWeakSet

🔍 差異範例說明

✳️ 值型別是「值拷貝」

1
2
3
4
5
let a = 10;
let b = a;

b = 20;
console.log(a); // 10 ✅ a 不變

✳️ 參考型別是「位址拷貝」

1
2
3
4
5
let obj1 = { name: 'Alice' };
let obj2 = obj1;

obj2.name = 'Bob';
console.log(obj1.name); // Bob ❗原物件也被改了

❗為什麼這很重要?

因為它會影響你:

  • 物件/陣列是否共享資料
  • 如何寫拷貝(深拷貝 vs 淺拷貝)
  • 函式參數是否會改變外部資料(因為是傳參考)

✅ 判斷資料型別方法

1. typeof

1
2
3
4
5
6
typeof 123        // 'number'
typeof 'hi' // 'string'
typeof {} // 'object'
typeof [] // 'object' ❗(陣列也是物件)
typeof null // 'object' ❗(語言設計缺陷)
typeof function(){} // 'function'

2. Array.isArray()

1
2
Array.isArray([]); // true
Array.isArray({}); // false

3. instanceof

1
2
3
[] instanceof Array       // true
{} instanceof Object // true
new Date() instanceof Date // true

🧠 小結:你該記住的是…

類型 是否為參考型別 複製的是什麼? 修改後是否影響原資料
number ❌ 否 值(Value)
string ❌ 否 值(Value)
object ✅ 是 記憶體位置(Reference) ✅ 會影響原資料
array ✅ 是 記憶體位置 ✅ 會影響原資料