メインコンテンツまでスキップ

switchのフォールスルー問題

JavaScriptのswitchのcaseには、分岐を抜けさせる働きがありません。分岐を抜けるには、breakが必要です。breakを書かない場合、次の分岐も実行されます。この仕様をフォールスルー(fallthrough)と言います。

ts
let s = "A";
switch (s) {
case "A": // breakが無い分岐
console.log(1);
case "B": // この分岐にも処理が続く
console.log(2);
}
1 2 の順で出力される
ts
let s = "A";
switch (s) {
case "A": // breakが無い分岐
console.log(1);
case "B": // この分岐にも処理が続く
console.log(2);
}
1 2 の順で出力される

フォールスルーはしばしばバグの原因になります。TypeScriptでは、コンパイラオプションnoFallthroughCasesInSwitchtrueにすると、フォールスルーを警告するようになります。このオプションは有効化しておきましょう。

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

switch文のfallthroughを禁止する
学びをシェアする

😴JavaScriptのswitchのcaseには、分岐を抜けさせる働きがない
⏩breakを書かないと次の分岐も実行される(フォールスルー)
🐞フォールスルーはバグになりがち
✅TypeScriptではnoFallthroughCasesInSwitchを有効にするとフォールスルーが検出される

『サバイバルTypeScript』より

この内容をツイートする
  • 質問する ─ 読んでも分からなかったこと、TypeScriptで分からないこと、お気軽にGitHubまで🙂
  • 問題を報告する ─ 文章やサンプルコードなどの誤植はお知らせください。