這是一個常見又很重要的 JavaScript 問題:
❓為什麼用 const
宣告的物件可以 push
?
1 | const arr = [1, 2, 3]; |
✅ 答案:因為 const
限制的是 變數的參考(reference)不可重新指定,不是內容不可改變!
🔍 詳細說明:
- 在 JavaScript 中,物件(Object)與陣列(Array)是「參考型別(reference type)」。
const
宣告的是「變數的參考地址不能變動」,但這個地址裡的內容(物件屬性、陣列元素)是可以改的。
✅ 可做的事:
你 可以修改物件/陣列的內容:
1 | const obj = { a: 1 }; |
❌ 不可做的事:
你 不能把這個變數重新指向其他物件或值:
1 | const obj = { a: 1 }; |
🧠 小結
類型 | 可以改內容? | 可以重新指定變數? |
---|---|---|
const 物件 |
✅ 可以 | ❌ 不行 |
let 物件 |
✅ 可以 | ✅ 可以 |
var 物件 |
✅ 可以 | ✅ 可以 |
📌 延伸說明(常見誤解)
❗誤解:「const 宣告就是不可變的變數」
錯。
const
宣告的變數是不可被重新賦值,但如果變數是物件或陣列,其內容仍可修改。
如果你想讓整個物件內容都不能變動,可以使用:
1 | const obj = Object.freeze({ a: 1 }); |