switch文
switch構文はJavaScriptで条件分岐を行うための構文です。
jsswitch (条件) {case 値A:値Aの処理;break;case 値B:値Bの処理;break;default:値Aと値B以外の処理;break;}
jsswitch (条件) {case 値A:値Aの処理;break;case 値B:値Bの処理;break;default:値Aと値B以外の処理;break;}
switch文を使った例は次です。
jsconstextension = "ts";switch (extension ) {case "js":console .log ("JavaScript");break;case "ts":console .log ("TypeScript");break;default:console .log ("不明な言語");break;}
jsconstextension = "ts";switch (extension ) {case "js":console .log ("JavaScript");break;case "ts":console .log ("TypeScript");break;default:console .log ("不明な言語");break;}
このコードはif-elseで書き直すと次のようになります。
jsconstextension = "ts";if (extension === "js") {console .log ("JavaScript");} else if (extension === "ts") {console .log ("TypeScript");} else {console .log ("不明な言語");}
jsconstextension = "ts";if (extension === "js") {console .log ("JavaScript");} else if (extension === "ts") {console .log ("TypeScript");} else {console .log ("不明な言語");}
caseは連続して書くこともできます。
jsconstfood = "🍙";switch (food ) {case "🍎":case "🍓":case "🍉":console .log ("くだもの");break;case "🍙":case "🍜":case "🍞":console .log ("炭水化物");break;case "🥕":case "🧅":case "🥬":console .log ("野菜");break;default:console .log ("未知の食べ物");break;}
jsconstfood = "🍙";switch (food ) {case "🍎":case "🍓":case "🍉":console .log ("くだもの");break;case "🍙":case "🍜":case "🍞":console .log ("炭水化物");break;case "🥕":case "🧅":case "🥬":console .log ("野菜");break;default:console .log ("未知の食べ物");break;}
switchは厳密等価演算
switch構文でその値であると判断されるのは等価演算(==)ではなく厳密等価演算(===)です。たとえばnullとundefinedは等価演算では等しいとされますが厳密等価演算では等しくありません。
tsconsole .log (null ==undefined );console .log (null ===undefined );
tsconsole .log (null ==undefined );console .log (null ===undefined );
このふたつを使ったswitch構文を作るとそのことがよくわかります。
tsfunctiontest (n : unknown): void {switch (n ) {case null:console .log ("THIS IS null");return;caseundefined :console .log ("THIS IS undefined");return;default:console .log ("THIS IS THE OTHER");}}test (null);test (undefined );
tsfunctiontest (n : unknown): void {switch (n ) {case null:console .log ("THIS IS null");return;caseundefined :console .log ("THIS IS undefined");return;default:console .log ("THIS IS THE OTHER");}}test (null);test (undefined );