☕ NEW! 完成新手任務即可參加抽獎!LINE 星巴克禮券等你拿,名額有限!        🎉 推廣活動:邀請好友註冊 DevLearn,累積推薦抽 LINE 星巴克禮券! 活動詳情 →        🔥 活動期間 2026/4/1 - 5/31 |已有 0 人參加       
javascript 初學

變數宣告與資料型態

三種宣告方式

var name = "小明";    // ← 舊式宣告(不推薦,有作用域問題)
let age = 20;         // ← 現代宣告(可以改值)
const PI = 3.14;      // ← 常數宣告(不能改值)

逐行解析:

var name = "小明";   // var 是 ES5 的宣告方式,作用域是「函數」
                      // 問題:在 if/for 裡宣告的 var 會洩漏到外面
let age = 20;         // let 是 ES6 的宣告方式,作用域是「區塊 {}」
                      // ✅ 推薦使用 let
const PI = 3.14;      // const 也是 ES6,宣告後不能重新賦值
                      // ✅ 不會改的值用 const

var 的問題

// var 的作用域是「函數」,不是「區塊」
if (true) {
    var x = 10;       // ← 用 var 宣告
}
console.log(x);       // ← 10(洩漏到 if 外面了!)

if (true) {
    let y = 10;       // ← 用 let 宣告
}
console.log(y);       // ← ❌ ReferenceError(let 限制在 {} 內)

七種基本型態

1. Number(數字)

let integer = 42;           // ← 整數
let float = 3.14;           // ← 浮點數(JS 不區分整數和小數)
let negative = -10;         // ← 負數
let infinity = Infinity;    // ← 無限大
let notANumber = NaN;       // ← Not a Number(非數字)

// 特殊值
console.log(0.1 + 0.2);         // ← 0.30000000000000004(浮點數精度問題!)
console.log(10 / 0);            // ← Infinity
console.log("hello" * 2);       // ← NaN(字串不能乘)
console.log(typeof 42);         // ← "number"

2. String(字串)

let single = '單引號';          // ← 單引號
let double = "雙引號";          // ← 雙引號
let backtick = `模板字串`;      // ← 反引號(ES6 模板字串)

// 模板字串可以嵌入變數
let name = "小明";
let greeting = `你好,${name}!今年 ${20 + 1} 歲。`;
// → "你好,小明!今年 21 歲。"

// 字串方法
console.log("Hello".length);       // ← 5
console.log("Hello".toUpperCase()); // ← "HELLO"
console.log("Hello".includes("ell")); // ← true
console.log("Hello".slice(1, 3));  // ← "el"(從位置 1 到 3)

3. Boolean(布林)

let isActive = true;
let isDeleted = false;

// 假值(Falsy)— 會被判斷為 false
console.log(Boolean(0));         // false
console.log(Boolean(""));        // false(空字串)
console.log(Boolean(null));      // false
console.log(Boolean(undefined)); // false
console.log(Boolean(NaN));       // false

// 其他都是真值(Truthy)
console.log(Boolean(1));         // true
console.log(Boolean("hello"));   // true
console.log(Boolean([]));        // true(空陣列也是 true!)

4-7. 其他型態

let empty = null;               // ← null:刻意設為「空」
let notDefined = undefined;     // ← undefined:還沒給值
let id = Symbol("id");          // ← Symbol:唯一識別碼(ES6)
let big = 9007199254740991n;    // ← BigInt:超大整數(ES2020)

console.log(typeof null);       // ← "object"(這是 JS 的歷史 bug!)
console.log(typeof undefined);  // ← "undefined"

型態轉換

// 字串 → 數字
Number("42")         // ← 42
parseInt("42.5")     // ← 42(取整數)
parseFloat("42.5")   // ← 42.5
+"42"                 // ← 42(一元加號轉換)

// 數字 → 字串
String(42)           // ← "42"
(42).toString()      // ← "42"
42 + ""              // ← "42"(加空字串)

// ⚠️ 隱式轉換陷阱
console.log("5" + 3);    // ← "53"(字串串接!)
console.log("5" - 3);    // ← 2(減法會轉數字)
console.log("5" == 5);   // ← true(== 會隱式轉換)
console.log("5" === 5);  // ← false(=== 嚴格比較,不轉換)

💡 永遠用 === 而不是 ==,避免隱式轉換的坑。

💡 大家的想法 · 0

載入中...
💬 即時聊天室 🟢 0 人在線
😀 😎 🤓 💻 🎮 🎸 🔥
➕ 新問題
📋 我的工單
💬 LINE 社群
🔒
需要註冊才能使用此功能
註冊帳號即可解鎖測驗、遊戲、簽到、筆記下載等所有功能,完全免費!
免費註冊