複数の if...else 文をネストすることで、 else if 節を作成することができます。 JavaScript では(1 単語の)elseif キーワードがありませんので注意してください。
js
if (condition1)
statement1
else if (condition2)
statement2
else if (condition3)
statement3
// …
else
statementN
これがどのように動作するか理解するために、ネストが適切にインデントされていたらどのように見えるかを示します。
js
if (condition1)
statement1
else
if (condition2)
statement2
else
if (condition3)
statement3
// …
節の中で複数の文を実行するためには、それらの文をグループ化するためにブロック文 ({ ... }) を使ってください。
js
if (condition) {
statements1
} else {
statements2
}
ブロックを使用しないと、特にコードが手作業で整形されている場合、混乱した動作になることがあります。
js
function checkValue(a, b) {
if (a === 1)
if (b === 2)
console.log("a is 1 and b is 2");
else
console.log("a is not 1");
}
このコードは何の問題もないように見えますが、checkValue(1, 3) を実行すると "a is not 1" というログを出力します。これは、dangling else の場合、else 節は最も近い if 節に接続されるからです。したがって、上記のコードを適切なインデントで記述すると、次のようになります。
js
function checkValue(a, b) {
if (a === 1)
if (b === 2)
console.log("a is 1 and b is 2");
else
console.log("a is not 1");
}
一般的な良い実践としては、常にブロック文を使用し、特に入れ子の if 文を含むコードでは、ブロック文を使用することをお勧めします。
js
function checkValue(a, b) {
if (a === 1) {
if (b === 2) {
console.log("a is 1 and b is 2");
}
} else {
console.log("a is not 1");
}
}
プリミティブの論理値である true および false を Boolean オブジェクトの真性や偽性と混同しないでください。 false, undefined, null, 0, -0, NaN, 空文字列 ("") のいずれでもない値、および任意のオブジェクトは(false の値を持つ Boolean オブジェクトを含め)、条件として使用されたときに真値と解釈されます。例えば以下のような場合です。
js
const b = new Boolean(false);
if (b) {
console.log("b is truthy"); // "b is truthy"
}