294

同じケースでaまたはbswitch caseをテストする必要がある場合、どのように a を使用しますか?

switch (pageid) {
  case "listing-page" || "home-page":
    alert("hello");
    break;
  case "details-page":
    alert("goodbye");
    break;
}
4

7 に答える 7

697

フォールスルーを使用できます:

switch (pageid)
{
    case "listing-page":
    case "home-page":
        alert("hello");
        break;
    case "details-page":
        alert("goodbye");
        break;
}
于 2011-06-28T21:58:52.717 に答える
133

他の回答では、実際に機能する理由を説明せずにその方法を説明しているので:

switch実行されると、最初に一致するcaseステートメントが検出され、switch の後のコードの各行が、breakステートメントまたはステートメントの末尾switch(またはreturn含まれている関数全体を終了するステートメント) に到達するまで実行されます。break次のコードも実行されるように意図的に を省略した場合、これはフォールスルーcaseと呼ばれます。したがって、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。これは、他のケースが一致しない場合に実行されます。a を含めず、default一致するケースがない場合は、何も起こりません。(オプションで)デフォルトのケースにフォールスルーできます。

したがって、私の 2 番目の例では if someVaris 1 が呼び出さsomeFunction()れ、複数のケースを通過するときに 4 つのアラートが表示され、そのうちのいくつかにはアラートがあります。someVar3、4、または 5 の場合、2 つのアラートが表示されます。7 の場合someVarは「その他」と表示され、8 またはその他の値の場合は「終わり」と表示されます。

于 2011-06-29T00:32:50.490 に答える
16

case2 つのラベルを作成する必要があります。

コントロールは最初のラベルから 2 番目のラベルにフォールスルーするため、どちらも同じコードを実行します。

于 2011-06-28T21:59:06.993 に答える
11

あなたはそれを切り替える必要があります!

switch (true) {
    case ( (pageid === "listing-page") || (pageid === ("home-page") ):
        alert("hello");
        break;
    case (pageid === "details-page"):
        alert("goodbye");
        break;
}
于 2015-12-15T16:44:21.947 に答える