Проверьте наличие нескольких случаев в переключателе, например, ИЛИ (||) - PullRequest
208 голосов
/ 29 июня 2011

Как бы вы использовали switch case, когда вам нужно проверить на a или b в том же случае?

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

Ответы [ 6 ]

483 голосов
/ 29 июня 2011

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

switch (pageid)
{
    case "listing-page":
    case "home-page":
        alert("hello");
        break;
    case "details-page":
        alert("goodbye");
        break;
}
112 голосов
/ 29 июня 2011

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

Когда выполняется switch, он находит первый соответствующий оператор case, а затем выполняет каждую строку кода после переключателя, пока не достигнет либо оператора break, либо конца switch (или return оператор, чтобы оставить всю содержащую функцию). Когда вы намеренно опускаете break, чтобы выполнялся также код под следующим case, который называется откат . Так что для требования ОП:

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 или любое другое значение, вы увидите «Конец».

14 голосов
/ 29 июня 2011

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

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

5 голосов
/ 15 декабря 2015

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

3 голосов
/ 07 мая 2017

Забудьте 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");
}
0 голосов
/ 27 августа 2014

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

switch (pageid)
{
    case "listing-page","home-page":
        alert("hello");
        break;
    case "details-page":
        alert("goodbye");
        break;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...