JavaScript 常數:解鎖不變性的力量
你好啊,未來的 JavaScript 巫師們!我非常高興能帶領你們進入 JavaScript 常數的神奇世界。作為你們友善的鄰居計算機科學老師,我見過無數學生為這個概念苦惱,但別擔心!在本課結束之前,你們將會成為常數的品鑑家。所以,拿起你的魔杖(鍵盤),我們一起來探索吧!
JavaScript 常數是什麼?
想像你正在烤蛋糕。一旦你將其放入烤箱,你就不能突然決定將其變成披薩,對吧?這就是 JavaScript 中常數的工作原理。它們就像是對你的代碼做出的承諾:「這個值不會變,拉勾盖章!」
常數是變量,一旦被賦值,就不能重新賦值。它們就像是變量的固執老大哥——一旦他們下定决心,就不會改變!
聲明 JavaScript 常數
在 JavaScript 中聲明常數,我們使用 const
關鍵字。這就像是在說,「喂,JavaScript,這個東西在這裡?它不會變。永遠不會。」
讓我們看一些例子:
const PI = 3.14159;
const DAYS_IN_WEEK = 7;
const FAVORITE_COLOR = "purple";
在這些例子中,我們為數學常數 pi、一周的天數和喜歡的顏色聲明了常數。一旦設定,這些值就被鎖定。
不能被重新賦值:常數的不變性
現在,讓我們看看常數的真實本色。一旦你為常數賦值,你就無法改變它。這就像是要說服一隻貓去洗澡——這根本是不可能的!
const MY_AGE = 25;
console.log(MY_AGE); // 輸出:25
MY_AGE = 26; // 抛出錯誤:對常量變量進行賦值。
如果你嘗試為常數重新賦值,JavaScript 會發脾氣(以錯誤的形式)。它會說,「嘿!你承諾這不會變的!」
块作用域:常數的遊樂場
常數具有我們所謂的「块作用域」。將块想像成一個被圍繞著柵欄的遊樂場。常數只能在它們指定的遊樂場內玩耍。
if (true) {
const BLOCK_SCOPED = "我只在這個块內有效!";
console.log(BLOCK_SCOPED); // 輸出:我只在這個块內有效!
}
console.log(BLOCK_SCOPED); // 抛出錯誤:BLOCK_SCOPED 未定義
在這個例子中,BLOCK_SCOPED
像是一個不允許離開遊樂場的孩子。它只存在於 if
块內,並且無法在塊外訪問。
JavaScript 中的常數數組和對象:情節逆轉
現在,讓我們來看看事情變得有點複雜的地方。當我們使用 const
關鍵字與數組和對象一起使用時,情節變得複雜!常數的綁定是不變的,但數組或對象的內容仍然是可變的。這就像是有了一個常數寵物——你不能改變它是你的寵物,但你仍然可以教它新技能!
const MY_PETS = ["dog", "cat", "fish"];
console.log(MY_PETS); // 輸出:["dog", "cat", "fish"]
MY_PETS.push("hamster");
console.log(MY_PETS); // 輸出:["dog", "cat", "fish", "hamster"]
MY_PETS = ["parrot"]; // 抛出錯誤:對常量變量進行賦值
在這個例子中,我們可以向我們的 MY_PETS
數組添加內容,但我們無法將其重新賦值為一個完全新的數組。
無法提升的 const
:待在原地!
與 var
不同,const
不会被提升。提升就像是當你告訴一個孩子去清理他們的房間,而他們說他們稍後會做——但對於 const
,沒有「稍後」。你必須在使用的之前聲明並初始化常數。
console.log(HOISTED_VAR); // 輸出:undefined
var HOISTED_VAR = "我被他提升了!";
console.log(NOT_HOISTED_CONST); // 抛出錯誤:在初始化之前無法訪問 'NOT_HOISTED_CONST'
const NOT_HOISTED_CONST = "我沒有被他提升!";
var
、let
和 const
的區別
現在,讓我們比較一下我們的三個變量聲明關鍵字:var
、let
和 const
。它們就像是三個有各自獨特性格的兄弟姐妹:
特性 | var | let | const |
---|---|---|---|
范圍 | 函数作用域 | 块作用域 | 块作用域 |
提升 | 是 | 否 | 否 |
重新賦值 | 是 | 是 | 否 |
重新聲明 | 是 | 否 | 否 |
在 var
、let
和 const
中應該使用哪一個?
經過多年的 JavaScript 教學,這裡是我的建議:
- 默認使用
const
。這就像是將你的變量放在一個保险箱裡——安全可靠。 - 當你知道值會變化時使用
let
,例如循環中的計數器。 - 除非你在處理舊代碼,否則避免使用
var
。這就像是抽屜裡的那部翻蓋手機——它還能工作,但現在已有更好的選擇。
記住,這些選擇是關於向其他開發者(包括將來的你)傳達你的意圖!
總結來說,JavaScript 中的常數是創建有預測性和錯誤抵抗力的代碼的有力工具。它們就像是房間裡負責任的成年人,保持著一切秩序。在你繼續你的 JavaScript 旅程時,你會發現適當使用常數可以使你的代碼更乾淨、更高效、更容易理解。
所以,勇往直前,年輕的學徒們,願「const」與你同在!
Credits: Image by storyset