Конструкция 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, то не сможете его забыть и получить ошибку ![]()
Комментарии
- Приветствуются комментарии, содержащие дополнения и вопросы по статье, и ответы на них.
- Если ваш комментарий касается задачи -- откройте её в отдельном окне и напишите там.
- Комментарии без смысла, с рекламой или не о статье вообще - удаляются.