JavaScript-выражение в случае коммутатора

Как бы вы использовали случай переключения, если вам нужно проверить "a" или "b" в том же случае?

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

Ответ 1

Вы можете использовать провал:

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

Ответ 2

Поскольку другие ответы объясняют, как это сделать, не объясняя, почему это работает:

Когда выполняется switch, он находит первый соответствующий оператор case, а затем выполняет каждую строку кода после переключения до тех пор, пока он не обратится к оператору 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 работает не так, как вы ожидали. По этой причине некоторые люди любят комментировать, чтобы сказать "провалиться", чтобы дать понять, когда заявления о прекращении были опущены специально. Я делаю это в следующем примере, так как это немного сложнее и показывает, как некоторые случаи могут включать код для выполнения до того, как они проваливаются:

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 и ни один случайный случай, ничего не произойдет. Вы можете (необязательно) перейти к случаю по умолчанию.

Итак, в моем втором примере, если someVar равно 1, он будет вызывать someFunction(), а затем вы увидите четыре предупреждения, поскольку оно попадает в несколько случаев, некоторые из которых имеют оповещения под ними. Является ли someVar 3, 4 или 5, вы увидите два предупреждения. Если someVar равно 7, вы увидите "Что-то еще", а если это 8 или любое другое значение, вы увидите "Конец".

Ответ 3

Вам нужно сделать две метки case.

Контроль будет проходить от первой метки до второй, поэтому они оба будут выполнять один и тот же код.

Ответ 4

Вы должны переключить его!

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

Ответ 5

Забудьте 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");
}

Ответ 6

Используйте запятые для разделения случая

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