Мастер-классы по Javascript Екатеринбург Ростов-на-Дону Москва Узнать больше...
Содержание (скрыть) Содержание (показать)

Конструкция 'switch'

  1. Синтаксис
  2. Пример
  3. Группировка case
  4. Тип имеет значение

Конструкция switch служит для сравнения значения на равенство с различными вариантами.

При этом равенство подразумевается в смысле оператора «===», сравнивать как-то еще switch не умеет.

Синтаксис

Выглядит она так:

switch(x) {
  case 'value1':  // if (x === 'value1')
    ...
    [break]

  case 'value2':  // if (x === 'value2')
    ...
    [break]

  default:
    ...
    [break]
}

Переменная x проверяется на строгое равенство первому значению value1, затем второму value2 и так далее.

Если соответствие установлено — switch начинает выполняться от соответствующей директивы case и далее, до ближайшего break (или до конца switch).

При этом case называют вариантами switch.

Если ни один case не совпал — выполняетcя (если есть) вариант default.

Пример

Пример использования switch (сработавший код выделен):

var a = 2+2;

switch (a) {
  case 3:
    alert('Маловато');
    break;
*!*
  case 4:
    alert('В точку!');
    break;
*/!*
  case 5:
    alert('Перебор');
    break;
  default:
    alert('Я таких значений не знаю');
}

Тот же пример без break:

var a = 2+2;

switch (a) {
  case 3:
    alert('Маловато');
*!*
  case 4:
    alert('В точку!');
  case 5:
    alert('Перебор');
  default:
    alert('Я таких значений не знаю');
*/!*
}

Как только case совпал - остальные проверки игнорируются. В примере выше последовательно выполнятся три alert.

alert('В точку!');

alert('Перебор');

alert('Я таких значений не знаю');

Вариантами case могут быть любые выражения, в том числе включающие в себя переменные и функции.

Например:

var a = 1;
var b = 0;

switch(a) {
*!*
  case b+1:
    alert(1);
    break;
*/!*

  default:
    alert('нет-нет, выполнится вариант выше')
}

Группировка case

Несколько значений case можно группировать. В примере ниже case 3 и case 5 выполняют один и тот же код.

var a = 2+2;

switch (a) {
  case 4:
    alert('Верно!');
    break;

  case 3:
  case 5:
    alert('Неверно!');
    break;

  default:
    alert('Я таких значений не знаю');
}

Тип имеет значение

Следующий пример принимает значение от посетителя.

var arg = prompt("Введите arg?")
switch(arg) {
  case '0':
  case '1':
    alert('Один или ноль');

  case '2':
    alert('Два');
    break;

  case 3:
    alert('Никогда не выполнится');

  case null: 
    alert('Отмена');
    break;

  default:
    alert('Неизвестное значение: ' + arg)
}

Что оно выведет при вводе чисел 0, 1, 2, 3? Подумайте и потом читайте дальше…

  • При вводе 0 или 1 выполненится первый alert, далее выполнение продолжится вниз до первого break и выведет второй alert('Два').
  • При вводе 2, switch перейдет к case '2' и выведет Два.
  • При вводе 3, switch перейдет на default. Это потому, что prompt возвращает строку '3', а не число. Типы разные. Switch использует строгое равенство ===, так что совпадения не будет.
  • При отмене сработает case null.

Перепишите код с использованием одной конструкции switch:

var a = +prompt('a?', '');

if (a == 0) {
  alert(0);
}
if (a == 1) {
  alert(1);
}

if (a == 2 ||  a == 3) {
  alert('2,3');
}

Решение
Решение

Первые две проверки - обычный case, третья разделена на два:

var a = +prompt('a?', '');

switch(a) {
  case 0:
    alert(0);
    break;

  case 1:
    alert(1);
    break;

  case 2:
  case 3:
    alert('2,3');
    break;
}

break внизу не обязателен, но служит правилом хорошего тона. Если вы будете добавлять новые case, то не сможете его забыть и получить ошибку Smile


Комментарии

  1. Приветствуются комментарии, содержащие дополнения и вопросы по статье, и ответы на них.
  2. Если ваш комментарий касается задачи -- откройте её в отдельном окне и напишите там.
  3. Комментарии без смысла, с рекламой или не о статье вообще - удаляются.
Наверх

Содержание

Реклама

Нашли опечатку?

Нашли опечатку на сайте? Что-то кажется странным?
Выделите соответствующий текст и нажмите Ctrl+Enter!

Последние Комментарии

Помоги другим!

Помоги другим узнать о хорошей статье!