aまたはbをテストする必要がある場合、switch
case
をどのように使用しますか同じ場合?
switch (pageid) {
case "listing-page" || "home-page":
alert("hello");
break;
case "details-page":
alert("goodbye");
break;
}
フォールスルーを使用できます:
switch (pageid)
{
case "listing-page":
case "home-page":
alert("hello");
break;
case "details-page":
alert("goodbye");
break;
}
他の回答では、なぜ機能するのかを実際に説明せずにそれを行う方法を説明しているため、
switch
を実行すると、最初に一致するcase
ステートメントが見つかり、break
ステートメントまたはswitch
(またはreturn
ステートメントの終わり)のいずれかがヒットするまで、スイッチの後にコードの各行が実行されます。意図的にbreak
を省略すると、次のcase
の下のコードも実行されます。これはfall-throughと呼ばれます。 OPの要件については:
switch (pageid) {
case "listing-page":
case "home-page":
alert("hello");
break;
case "details-page":
alert("goodbye");
break;
}
break
ステートメントを含めるのを忘れることは、かなり一般的なコーディングの間違いであり、switch
が期待どおりに機能しない場合は、最初に探す必要があります。そのため、一部の人々は、「フォールスルー」と言うコメントを入れて、意図的にbreakステートメントが省略された場合にそれを明確にすることを好みます。次の例ではそれをやや複雑にし、フォールスルーする前に実行するコードを一部のケースに含める方法を示しているため、これを行います。
switch (someVar) {
case 1:
someFunction();
alert("It was 1");
// fall through
case 2:
alert("The 2 case");
// fall through
case 3:
// fall through
case 4:
// fall through
case 5:
alert("The 5 case");
// fall through
case 6:
alert("The 6 case");
break;
case 7:
alert("Something else");
break;
case 8:
// fall through
default:
alert("The end");
break;
}
また、(オプションで)default
ケースを含めることもできます。これは、他のケースがどれも一致しない場合に実行されます-default
を含めず、ケースが一致しない場合は何も起こりません。 (オプションで)デフォルトのケースにフォールスルーできます。
したがって、2番目の例では、someVar
が1の場合、someFunction()
が呼び出され、複数のケースに分類される4つのアラートが表示されます。 someVar
が3、4または5の場合、2つのアラートが表示されます。 someVar
が7の場合、「Something else」が表示され、8またはその他の値の場合、「The end」が表示されます。
2つのcase
ラベルを作成する必要があります。
コントロールは最初のラベルから2番目のラベルにフォールスルーするため、両方が同じコードを実行します。
あなたはそれを切り替える必要があります!
switch (true) {
case ( (pageid === "listing-page") || (pageid === ("home-page") ):
alert("hello");
break;
case (pageid === "details-page"):
alert("goodbye");
break;
}
switch
とbreak
を忘れて、if
で遊ぼう。そして主張する代わりに
if(pageid === "listing-page" || pageid === "home-page")
ケース付きの複数の配列を作成し、 Array.prototype.includes() で確認できます
var caseA = ["listing-page", "home-page"];
var caseB = ["details-page", "case04", "case05"];
if(caseA.includes(pageid)) {
alert("hello");
}
else if (caseB.includes(pageid)) {
alert("goodbye");
}
else {
alert("there is no else case");
}