在昨天的文章中,我們認識了JavaScript的五大基礎資料型態,並學會用運算子讓JavaScript幫我們處理加減乘除與邏輯比較。
但如果我們希望網頁能把算好的幾何數據「暫時記住」,以便在後續的排版或程式邏輯中反覆使用,我們就需要引入JavaScript最核心的東西:變數宣告。
你可以把變數想像成是一個個貼了標籤的專屬置物櫃。我們把資料放進櫃子裡,並貼上名字,以後只要喊出櫃子的名字,就能隨時取出裡面的資料,而在JavaScript的歷史演進中,一共出現了三種打造置物櫃的關鍵字:var、let 與 const。
隨著JavaScript的標準(ECMAScript)在2015年迎來了ES6的重大變革,現代前端開發已經全面改變了變數的使用習慣,我們接下來將拆解它們的本質:
var(舊時代的傳統置物櫃)var。let(現代的彈性置物櫃)var的新一代關鍵字,它不允許在同一個作用域內重複宣告同名變數,如果嘗試這樣做,JavaScript會立刻噴出錯誤(SyntaxError),安全度極高。let,例如:會員的登入狀態、遊戲的分數、商品的購買數量。const(現代的鋼鐵保險箱)const,例:圓周率3.14159、一秒=1000 毫秒、網站的API網址。| 關鍵字 | 能否重複宣告(宣告同名變數) | 能否重新賦值(修改櫃子裡的內容) | 實務推薦指數 |
|---|---|---|---|
var |
可以(容易引發混亂) | 可以 | 極度不推薦(已棄用) |
let |
不可以(安全防護) | 可以 | 可以用(變動資料首選) |
const |
不可以 | 不可以 | 推薦(預設首選) |
<!DOCTYPE html>
<html lang="zh-Hant">
<head>
<meta charset="UTF-8">
<title>Day22 變數宣告 var、let、const</title>
</head>
<body>
<h1 style="text-align: center;">請打開Console觀察變數與防禦機制</h1>
<script>
// var的失控現象
var score = 100;
var score = 200; // 允許重複宣告
console.log("var 的分數為:" + score); // 印出200,舊資料消失了
// 現代 let 的彈性與安全防護
let playerAge = 18;
playerAge = 19; // 櫃子內容可以被更新(重新賦值)
console.log("玩家年齡變更為:" + playerAge); // 印出 19
// let playerAge = 25; // 拿掉註解會噴錯,SyntaxError: Identifier 'playerAge' has already been declared
// 現代 const 的鋼鐵防禦
const PI = 3.14159;
console.log("幾何圓周率為:" + PI);
// PI = 3.14; // 拿掉註解會立刻噴錯,TypeError: Assignment to constant variable.
</script>
</body>
</html>

let playerAge = 25;的註解時
PI = 3.14;的註解時
當你嘗試在程式中刪掉let playerAge = 25; 或 PI = 3.14; 的註解時,你會發現控制台會亮起紅色的錯誤警示。
let與const,瀏覽器在編譯階段就能幫我們擋下「不小心改到重要常數」或「重複命名導致資料覆蓋」的悲劇,讓程式碼的幾何結構變得無比穩固。今天我們成功搞懂了JavaScript中用來記住資料的三大置物櫃關鍵字,現代前端開發的核心非常簡單:「預設全部使用 const,只有當你明確知道這個變數的數值後續會被修改時,才改用let;至於var,就讓它留在歷史中吧。」
有了變數作為基石,我們的網頁大腦不僅能記住資料,還能開始進行更複雜的決策了。
明天(Day 23),我們將讓JavaScript擁有「判斷與抉擇」的能力,進入條件判斷式與迴圈控制(if-else、switch、for、while),去看看如何讓程式根據不同的狀況,走入不同的方向,明天見。