JavaScript Switch文

Switch文は、異なる条件に基づいて異なるアクションを実行するために使用されます。

Switch文を使用して、実行する多くのコードブロックのうちの1つを選択します。

Syntax


switch (expression) {
  case x:
    // コードブロック
    break;
  case y:
    // コードブロック
    break;
  default:
    // コードブロック
}

Switch文の動作は次の通りです:

  • Switch式は1度評価されます。
  • 式の値は各caseの値と比較されます。
  • 一致する場合、関連するコードブロックが実行されます。
  • 一致するcaseがない場合、defaultのコードブロックが実行されます。

getDay()メソッドは、0から6の数字で曜日を返します。

(日曜日=0, 月曜日=1, 火曜日=2 ..)

この例では、曜日の数字を使用して曜日の名前を計算しています:


switch (new Date().getDay()) {
  case 0:
    day = "日曜日";
    break;
  case 1:
    day = "月曜日";
    break;
  case 2:
    day = "火曜日";
    break;
  case 3:
    day = "水曜日";
    break;
  case 4:
    day = "木曜日";
    break;
  case 5:
    day = "金曜日";
    break;
  case 6:
    day = "土曜日";
}

breakキーワード

JavaScriptはbreakキーワードに達すると、Switchブロックから抜け出します。

これにより、Switchブロック内の実行が停止します。

Switchブロックの最後のcaseにbreakを記述する必要はありません。ブロックはそこで終了します。

Note: break文を省略すると、評価が一致しなくても次のcaseが実行されます。

defaultキーワード

defaultキーワードは、caseと一致するものがない場合に実行するコードを指定します:

getDay()メソッドは、0から6の数字で曜日を返します。

もし今日が土曜日(6)でも日曜日(0)でもない場合、デフォルトのメッセージを表示します:


switch (new Date().getDay()) {
  case 6:
    text = "今日は土曜日です";
    break;
  case 0:
    text = "今日は日曜日です";
    break;
  default:
    text = "週末を楽しみにしています";
}

defaultはSwitchブロック内で最後のcaseである必要はありません:


switch (new Date().getDay()) {
  default:
    text = "週末を楽しみにしています";
    break;
  case 6:
    text = "今日は土曜日です";
    break;
  case 0:
    text = "今日は日曜日です";
}

defaultがSwitchブロック内の最後のcaseでない場合は、defaultのcaseもbreakで終了させることを忘れないでください。

共通のコードブロック

時々、異なるSwitchケースが同じコードブロックを使用することがあります。

この例では、case 4と5が同じコードブロックを共有し、0と6が別のコードブロックを共有しています:


switch (new Date().getDay()) {
  case 4:
  case 5:
    text = "週末が近づいています";
    break;
  case 0:
  case 6:
    text = "週末です";
    break;
  default:
    text = "週末を楽しみにしています";
}

Switchの詳細

複数のケースが同じケース値に一致する場合、最初のケースが選択されます。

一致するcaseが見つからない場合、プログラムはdefaultラベルに進みます。

defaultラベルが見つからない場合、Switchの後の文(ステートメント)に進みます。

厳密な比較

Switchのケースは厳密な比較(===)を使用します。

一致するためには、値は同じ型でなければなりません。

オペランドが同じ型である場合、厳密な比較はのみtrueになります。

この例では、xには一致するものがありません:


let x = "0";
switch (x) {
  case 0:
    text = "オフ";
    break;
  case 1:
    text = "オン";
    break;
  default:
    text = "値が見つかりません";
}