JavaScript 入門 | 制御文 (control flow statements) | 条件文 (conditional statements)

条件文 (conditional statements)

条件文とは、プログラム内で与えられた式の結果に応じて、別の命令を実行するよう制御する文である。
条件文の中で最も基本になる文は if 文である。

JavaScript で使用できる条件文の形式は次のとおりである。

  1. if 文
  2. if / else 文
  3. if / else if / else 文
  4. switch 文

if 文

if 文は、式の結果が true であれば与えられた文を実行し、false であれば何も実行しない。

if 文の構文は次のとおりである。

if () {
    式の結果が true のときに実行したい文;
}
var x = 10, y = 20;
if (x == y) {
    document.write("x と y は等しい。");
}
if (x < y) {
    document.write("x は y より小さい。");
}
if (x > y) // 実行される文が 1 行だけであれば、中括弧 ({}) を省略できる。
    document.write("x は y より大きい。");

if 文で実行される文が 1 行だけであれば、中括弧 ({}) を省略できる。

else 文

if 文と一緒に使用できる else 文は、if 文の式の結果が false のときに与えられた文を実行する。

else 文の構文は次のとおりである。

if () {
    式の結果が true のときに実行したい文;
} else {
    式の結果が false のときに実行したい文;
}

else 文を使用すると、前の例をより直感的に表現できる。

var x = 10, y = 20;
if (x == y) {
    document.write("x と y は等しい。");
} else {
    if (x < y)
        document.write("x は y より小さい。");
    else // 実行される文が 1 行だけであれば、中括弧 ({}) を省略できる。
        document.write("x は y より大きい。");
}

else 文でも、実行される文が 1 行だけであれば中括弧 ({}) を省略できる。

else if 文

else if 文は if 文のように式を設定できるため、ネストした if 文をより簡潔に表現できる。
1 つの条件文の中で、if 文と else 文はそれぞれ 1 回だけ使用できる。
しかし else if 文は複数回使用でき、さまざまな条件を設定できる。

else if 文の構文は次のとおりである。

if (式1) {
    式1の結果が true のときに実行したい文;
} else if (式2) {
    式2の結果が true のときに実行したい文;
} else {
    式1の結果も false 式2の結果も false のときに実行したい文;
}
var x = 10, y = 20;
if (x == y) {
    document.write("x と y は等しい。");
} else if (x < y) {
    document.write("x は y より小さい。");
} else { // x > y の場合
    document.write("x は y より大きい。");
}

else if 文でも、実行される文が 1 行だけであれば中括弧 ({}) を省略できる。

三項演算子による条件文

JavaScript では、簡単な if / else 文を三項演算子で簡潔に表現できる。

式 ? 戻り値1 : 戻り値2

switch 文

switch 文は if / else 文と同様に、与えられた条件値に応じてプログラムが別の命令を実行するようにする条件文である。 この switch 文は、if / else 文より可読性の面で優れている場合がある。

switch 文の構文は次のとおりである。

switch (条件値) {
    case 値1:
        条件値が値1のときに実行したい文;
        break;
    case 値2:
        条件値が値2のときに実行したい文;
        break;
    ...
    default:
        条件値がどの case 節にも該当しないときに実行したい文;
        break;
}

default 節は、条件値が上に列挙されたどの case 節にも該当しないときに実行される。
この構文は必ず存在する必要はなく、必要なときだけ宣言できる。

各 case 節および default 節には、break キーワードを含める必要がある。
break キーワードは、条件値に該当する case 節または default 節が実行された後、switch 文全体から抜け出すようにする。

default 節の位置は、必ずしも switch 文の最後である必要はない。

var x = 10;
switch (typeof x) {
    case "number":
        document.write("変数 x の型は数値である。");
        break;
    case "string":
        document.write("変数 x の型は文字列である。");
        break;
    case "object":
        document.write("変数 x の型はオブジェクトである。");
        break;
    default:
        document.write("変数 x の型がよく分かりません...");
        break;
}

次の例は、case 節と default 節に break キーワードがない場合に何が起きるかを示す例である。

var x = "文字列";
switch (typeof x) {
    case "number":
        document.write("変数 x の型は数値である。<br>");
    case "string":
        document.write("変数 x の型は文字列である。<br>");
    case "object":
        document.write("変数 x の型はオブジェクトである。<br>");
    default:
        document.write("変数 x の型がよく分かりません...<br>");
}

上の例で変数 x は string 型なので、2 番目の case 節の document.write() メソッドが最初に実行される。
しかし break キーワードがないため、2 番目の case 節以降にあるすべての文も実行される。
したがって、case 節と default 節には必ず break キーワードを含める必要がある。

次の例のように、複数の case 節を使って複数の条件を一度に表現することもできる。

var day = new Date().getDay(); // 今日の曜日を返す。(日曜日: 0 ~ 土曜日: 6)
switch (day) {
    case 1: // 月曜日の場合
    case 2: // 火曜日の場合
    case 3: // 水曜日の場合
    case 4: // 木曜日の場合
    default: // 0 から 6 までの値でない場合
        document.write("週末はまだ遠いですね... がんばりましょう!");
        break;
    case 5: // 金曜日の場合
        document.write("今日は金曜日ですね!");
        break;
    case 6: // 土曜日の場合
    case 0: // 日曜日の場合
        document.write("楽しい週末にも一生懸命勉強するあなたは最高です!");
        break;
}