for (var count = 1; count < 6; count++) {
switch (count) {
case (2): document.write("hi"); break;
case (count > 3): document.write("bye"); break;
case (count >= 4): document.write("lol"); break;
}
}
さようならや笑いを印刷するのではなく、期待どおりに動作しないため、JavaScriptでこれが無効であると思わせます。 Googleでこれを行うかどうかを確認するためにいくつかの例を探してみましたが、何も表示されませんでした。これは有効ですか?またはなぜこれが機能しないのですか?
switch
が解釈されると、括弧内の式が特定のケースの値と比較されます。
したがって、あなたの場合、count
の値は、2
、count > 3
、およびcount >= 4
の値と比較されます。そして、それはうまくいきません。書き換えて、true
と比較して動作させることができますが:
switch (true) {
case (count == 2):
document.write("hi");
break;
case (count > 3):
document.write("bye");
break;
case (count >= 4):
document.write("lol");
break;
}
しかし、それはswitch
の使用方法ではありません。
代わりにif
ステートメントを使用します。
if (count == 2) {
document.write("hi");
} else if (count > 3) {
document.write("bye");
} else if (count >= 4) {
document.write("lol");
}
Editswitch
ケースのみを使用するため(ケースが一致する場合は中断します)、my switch
- to -if
/else
翻訳は正しいです。
しかし、count >= 4
case/branchは、count
の値が4以上の場合、count > 3
が(また)trueであるため、決して適用されません。
この問題を解決するには(「bye」と「lol」を4以上の値に書き込む)、最後のelse
を削除して最後のif
を作成します上記とは独立したステートメント:
if (count == 2) {
document.write("hi");
} else if (count > 3) {
document.write("bye");
}
if (count >= 4) {
document.write("lol");
}
これは Gumboの答え の修正です。これがコメントとして収まらないので、私は別の答えを書いています。
編集:ガンボは、ダグの意図を誤解した可能性があるとコメントで示唆しました。 OPがカウント> = 4で「bye」と「lol」の両方を印刷することを本当に望む場合、break
からswitch
を削除する必要があります。ケースは元の順序に戻っているため、「bye」と「lol」はその順序で印刷されます(明らかにOPの意図です)。
switch (true) {
case (count == 2):
document.write("hi");
break;
case (count > 3):
document.write("bye");
// No break here; just fall through.
case (count >= 4):
document.write("lol");
break;
}
この場合、改訂されたif
ステートメントが正しいことをガンボに同意します。
元の回答が続きます(OPが実際にどちらかのどちらかを印刷することを望んでいると仮定しますが、両方ではありません。)
Gumboが書いた というswitch
ステートメントは、Gumboの元のif
ステートメントが機能しないのとほぼ同じ理由で、カウント> = 4では機能しません。ケースは順番に評価され、カウント> = 4は2番目のケース(カウント> 3)が実行されることを意味します。したがって、スクリプトはカウント> = 4のテストに到達しません。これを修正するには、テストを最高から最低の逆の順序で実行する必要があります。
switch (true) {
case (count >= 4):
document.write("lol");
break;
case (count > 3):
document.write("bye");
break;
case (count == 2):
document.write("hi");
break;
}
修正されたif
ステートメントはまだ正しくありません。カウント> = 4の場合、出力でbothbye
およびlol
が生成されるためです。繰り返しますが、if
ラダー内のテストは、最高値から最低値に行くように調整する必要があります。
if (count >= 4) {
document.write("lol");
} else if (count > 3) {
document.write("bye");
} else if (count == 2) {
document.write("hi");
}
count
が整数の場合、count >= 4
とcount > 3
を評価すると同じ結果が得られるため、これは理想的な例ではありません-カウントのtrue
4、false
それ以外。 count
が浮動小数点値である場合はそうではありません(ただし、「count」という名前の浮動小数点値は他の懸念を引き起こすでしょう)。
ケース句を間違った方法で使用しています。 switch句の値と比較される値を指定する必要があります...このようなブール式ではなく、count>2
この場合、このブール式はtrueまたはfalse(1または0)にキャストされ、値のカウントと比較され、動作する場合と動作しない場合があります。
Ifステートメントで置き換えることを検討する必要があります。
最後の2つのケースを交換する必要があります。
switch
は通常、固定条件/値が必要です。 count
変数は毎回変更されるため、それに反します。代わりにif-else
条件を使用してください。