Nhảy tới nội dung

Vấn đề fallthrough trong switch

case trong switch của JavaScript không có tác dụng thoát khỏi phân nhánh. Để thoát khỏi phân nhánh, cần có break. Nếu không viết break, xử lý sẽ tiếp tục vào phân nhánh tiếp theo. Đặc tả này được gọi là fallthrough.

ts
let s = "A";
switch (s) {
case "A": // Phân nhánh không có break
console.log(1);
case "B": // Xử lý tiếp tục vào phân nhánh này
console.log(2);
}
1 2 được xuất ra theo thứ tự
ts
let s = "A";
switch (s) {
case "A": // Phân nhánh không có break
console.log(1);
case "B": // Xử lý tiếp tục vào phân nhánh này
console.log(2);
}
1 2 được xuất ra theo thứ tự

Fallthrough thường là nguyên nhân gây bug. Trong TypeScript, bật compiler option noFallthroughCasesInSwitch thành true sẽ cảnh báo về fallthrough. Nên bật option này.

ts
let s = "A";
switch (s) {
case "A":
Fallthrough case in switch.7029Fallthrough case in switch.
console.log(1);
case "B":
console.log(2);
}
ts
let s = "A";
switch (s) {
case "A":
Fallthrough case in switch.7029Fallthrough case in switch.
console.log(1);
case "B":
console.log(2);
}

📄️ noFallthroughCasesInSwitch

Cấm fallthrough trong switch statement

Chia sẻ kiến thức

😴case trong switch của JavaScript không có tác dụng thoát khỏi phân nhánh
⏩Nếu không viết break, phân nhánh tiếp theo cũng được thực thi (fallthrough)
🐞Fallthrough dễ gây bug
✅Trong TypeScript, bật noFallthroughCasesInSwitch sẽ phát hiện fallthrough

Từ 『Survival TypeScript』

Đăng nội dung này lên X