JavaScript 常數:解鎖不變性的力量

你好啊,未來的 JavaScript 巫師們!我非常高興能帶領你們進入 JavaScript 常數的神奇世界。作為你們友善的鄰居計算機科學老師,我見過無數學生為這個概念苦惱,但別擔心!在本課結束之前,你們將會成為常數的品鑑家。所以,拿起你的魔杖(鍵盤),我們一起來探索吧!

JavaScript - Constants

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 = "我沒有被他提升!";

varletconst 的區別

現在,讓我們比較一下我們的三個變量聲明關鍵字:varletconst。它們就像是三個有各自獨特性格的兄弟姐妹:

特性 var let const
范圍 函数作用域 块作用域 块作用域
提升
重新賦值
重新聲明

varletconst 中應該使用哪一個?

經過多年的 JavaScript 教學,這裡是我的建議:

  1. 默認使用 const。這就像是將你的變量放在一個保险箱裡——安全可靠。
  2. 當你知道值會變化時使用 let,例如循環中的計數器。
  3. 除非你在處理舊代碼,否則避免使用 var。這就像是抽屜裡的那部翻蓋手機——它還能工作,但現在已有更好的選擇。

記住,這些選擇是關於向其他開發者(包括將來的你)傳達你的意圖!

總結來說,JavaScript 中的常數是創建有預測性和錯誤抵抗力的代碼的有力工具。它們就像是房間裡負責任的成年人,保持著一切秩序。在你繼續你的 JavaScript 旅程時,你會發現適當使用常數可以使你的代碼更乾淨、更高效、更容易理解。

所以,勇往直前,年輕的學徒們,願「const」與你同在!

Credits: Image by storyset