Conditional Statements (Câu Lệnh Điều Kiện)
If…Else
Phần tiêu đề “If…Else”Khái niệm
Phần tiêu đề “Khái niệm”if...else là cấu trúc rẽ nhánh quen thuộc nhất — dùng để rẽ nhánh dựa trên biểu thức boolean (truthy/falsy). Bạn có thể xâu chuỗi else if để bao phủ nhiều điều kiện.
Cú pháp
Phần tiêu đề “Cú pháp”if (condition) { // chạy khi condition là truthy}if (condition) { // truthy} else { // falsy}if (condition1) { // condition1 đúng} else if (condition2) { // condition2 đúng} else { // tất cả sai}Ví dụ
Phần tiêu đề “Ví dụ”const score = 84;
if (score >= 90) { console.log("A");} else if (score >= 80) { console.log("B"); // ← "B" (84 >= 80)} else if (score >= 70) { console.log("C");} else { console.log("F");}Truthy / Falsy
Phần tiêu đề “Truthy / Falsy”Toán tử 3 ngôi (Ternary)
Phần tiêu đề “Toán tử 3 ngôi (Ternary)”Dùng cho biểu thức đơn giản thay vì khối if...else:
const age = 17;const canVote = age >= 18 ? "Yes" : "No"; // "No"Short-circuit với &&, ||, ??
Phần tiêu đề “Short-circuit với &&, ||, ??”Trả về giá trị falsy đầu tiên, hoặc giá trị cuối nếu tất cả truthy:
const user = { name: "An" };user && console.log(user.name); // "An" — chỉ chạy nếu user tồn tại
0 && "hello"; // 0 (falsy đầu tiên)1 && "hello"; // "hello" (tất cả truthy → giá trị cuối)Trả về giá trị truthy đầu tiên, hoặc giá trị cuối nếu tất cả falsy:
const name = input || "Guest"; // fallback nếu input là falsy
"" || "default"; // "default" ("" là falsy)"hello" || "world"; // "hello" (truthy đầu tiên)Trả về vế phải chỉ khi vế trái là null hoặc undefined (không gộp 0, "", false):
const count = 0;count || 10; // 10 ← sai! (0 là falsy)count ?? 10; // 0 ← đúng! (0 không phải null/undefined)
null ?? "default"; // "default"undefined ?? "default"; // "default"Switch…Case
Phần tiêu đề “Switch…Case”Khái niệm
Phần tiêu đề “Khái niệm”switch chọn nhánh theo giá trị (so sánh ===). Hữu ích khi có nhiều case rời rạc cùng kiểm tra một biến.
Cú pháp
Phần tiêu đề “Cú pháp”switch (expression) { case value1: // chạy khi expression === value1 break; case value2: // chạy khi expression === value2 break; default: // chạy nếu không khớp case nào}Ví dụ
Phần tiêu đề “Ví dụ”const role = "admin";
switch (role) { case "admin": console.log("Full access"); break; case "editor": console.log("Edit access"); break; case "viewer": console.log("Read only"); break; default: console.log("Unknown role");}Nhiều giá trị dùng chung một nhánh xử lý:
const code = 400;
switch (code) { case 400: case 404: case 422: console.log("Client error"); break; case 500: case 502: console.log("Server error"); break; default: console.log("OK");}Trong hàm, dùng return thay break cho gọn:
function getLabel(status) { switch (status) { case "active": return "🟢 Active"; case "pending": return "🟡 Pending"; case "inactive": return "🔴 Inactive"; default: return "❓ Unknown"; }}Lưu ý quan trọng
Phần tiêu đề “Lưu ý quan trọng”Switch vs Object Lookup
Phần tiêu đề “Switch vs Object Lookup”function getDiscount(tier) { switch (tier) { case "gold": return 0.2; case "silver": return 0.1; case "bronze": return 0.05; default: return 0; }}const discounts = { gold: 0.2, silver: 0.1, bronze: 0.05,};
function getDiscount(tier) { return discounts[tier] ?? 0;}Tóm tắt
Phần tiêu đề “Tóm tắt”| Cấu trúc | Mô tả | Best Practice |
|---|---|---|
if...else | Rẽ nhánh boolean | Ưu tiên guard clause (return sớm) |
switch | Rẽ nhánh theo giá trị === | Luôn break/return mỗi case |
? : | Biểu thức điều kiện | Không lồng sâu > 1 tầng |
&& / || | Short-circuit | Dùng cho check nhanh / fallback |
?? | Nullish coalescing | Thay || khi 0/"" là giá trị hợp lệ |