switchのフォールスルー問題
JavaScriptのswitchのcase
には、分岐を抜けさせる働きがありません。分岐を抜けるには、break
が必要です。break
を書かない場合、次の分岐も実行されます。この仕様をフォールスルー(fallthrough)と言います。
ts
lets = "A";switch (s ) {case "A": // breakが無い分岐console .log (1);case "B": // この分岐にも処理が続くconsole .log (2);}
ts
lets = "A";switch (s ) {case "A": // breakが無い分岐console .log (1);case "B": // この分岐にも処理が続くconsole .log (2);}
フォールスルーはしばしばバグの原因になります。TypeScriptでは、コンパイラオプションnoFallthroughCasesInSwitch
をtrue
にすると、フォールスルーを警告するようになります。このオプションは有効化しておきましょう。
ts
lets = "A";switch (s ) {case "A":Fallthrough case in switch.7029Fallthrough case in switch.console .log (1);case "B":console .log (2);}
ts
lets = "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』より