當你剛開始學習 JavaScript,最先接觸到的就是「資料型別」與「變數宣告」。這兩個概念雖然看似簡單,卻會影響程式的可讀性與維護性。本文將介紹 JavaScript 的資料型別,以及 var、let、const 三種變數宣告方式的差異與使用時機。
什麼是資料型別?
在 JavaScript 裡,資料型別(Data Types)指的是「資料的型態」,也就是說,程式需要知道你現在處理的是數字、文字、還是其他類型的資料。資料類型可分為兩大類:基本型別與物件型別。
基本型別
- 數字 (Number):整數與浮點數,例如
10
、3.14
。 - 字串 (String):用單引號或雙引號包住的文字,例如
"Hello"
或'你好'
。 - 布林值 (Boolean):
true
(真)和false
(假),常用來判斷條件是否成立。 - 未定義 (Undefined):未定義,當你宣告變數後,但還沒給它值時的預設值。
- 空值 (Null):空值,表示變數刻意被設定為「無值」。
- 符號 (Symbol):ES6 新增的型別,通常用於物件屬性的唯一鍵。
物件型別
除了上述基本型別,JavaScript 還有「物件型別」(Object),像是:- 物件 (Object):鍵值對的集合,例如
{ name: "Alice", age: 30 }
。 - 陣列 (Array):有序的元素集合,例如
[1, 2, 3]
。 - 函式(Function):可被呼叫的程式區塊,例如
function greet() {}
。
變數宣告
變數就是用來儲存資料的「容器」。在 JavaScript 裡,主要的宣告方式有三種:var
、let
、const
。
var
使用 var
宣告的變數,其作用域僅限於函式內部,而非區塊(例如 if
、for
、while
等區塊)。此外,var
宣告的變數會被提升至函式頂部,這可能導致預期之外的行為。
function example() {
var x = 10;
if (true) {
var x = 20; // 同樣的變數,會覆蓋外層的 x
}
console.log(x); // 輸出 20,而非 10
}
if (true) {
var y = 30;
}
console.log(y); // 輸出 30,var 不受區塊作用域限制
let
let
是 ES6 引入的,用於解決 var
的一些問題。let
宣告的變數僅在其所在的區塊內有效,且不能在同一作用域內重複宣告。這有助於避免變數覆蓋和提升帶來的問題。
function example() {
let x = 10;
if (true) {
let x = 20; // 不同的變數,僅在 if 區塊內有效
}
console.log(x); // 輸出 10,不受區塊內宣告的影響
}
if (true) {
let z = 40;
}
// console.log(z); // 錯誤:z is not defined,因為 let 受區塊作用域限制
const
const
也是 ES6 引入的,用於宣告常數。一旦賦值後,不能再被重新賦值。需要注意的是,若 const
宣告的是物件或陣列,其內容仍然可以被修改,但不能將整個物件或陣列重新賦值。const
的作用域規則與 let 相同,僅限於宣告它的區塊內。
function example() {
const x = 10;
if (true) {
const x = 20; // 不同的常數,僅在 if 區塊內有效
}
console.log(x); // 輸出 10,不受區塊內宣告的影響
}
if (true) {
const obj = { key: 'value' };
obj.key = 'new value'; // 可以修改物件的屬性
// obj = {}; // 錯誤:不能重新賦值
}
// console.log(obj); // 錯誤:obj is not defined,因為 const 受區塊作用域限制
何時使用 var、let、const?
在現代的 JavaScript 開發中,建議盡量避免使用 var
,因為它的函式作用域和變數提升可能導致難以預測的行為。
- 使用
const
:當變數的值不需要被重新賦值時使用,可以增加程式碼的可讀性和可靠性。 - 使用
let
:當變數的值需要被重新賦值時使用。
變數命名規則
變數命名的時候有幾個基本規則:
- 只能用英文字母、數字、底線(_)、或美元符號($)開頭,不能用數字開頭。
- 變數名稱區分大小寫,例如 age 和 Age 是不同的變數。
- 建議用有意義的名稱,方便日後的理解與維護。
資料型別判斷與轉換
JavaScript 是弱型別語言,變數型別可以動態改變。你可以使用 typeof
判斷型別:
typeof 42; // 'number'
typeof 'Hello'; // 'string'
型別轉換的方式有兩種,分別是隱性轉換與顯性轉換:
// 隱性轉換
let num = '10' + 5; // '105'(字串)
// 顯性轉換
let realNum = Number('10') + 5; // 15(數字)
結語
掌握資料型別與變數宣告,是寫好 JavaScript 程式的第一步。在實際撰寫程式時,建議優先使用 let 與 const 來宣告變數,並且注意每個變數裡存放的是什麼型別的資料。這樣不僅能讓你的程式更穩定,也更容易除錯。