Оператор switch ... case
является альтернативой оператору if … else if … else
, который делает почти то же самое. Оператор switch … case
проверяет переменную или выражение по ряду условий, пока не найдет совпадение, а затем выполняет блок кода, соответствующий этому совпадению. Это синтаксис:
switch(x){
case value1:
// Код, который будет выполнен, если x === value1
break;
case value2:
// Код, который будет выполнен, если x === value2
break;
...
default:
// Код, который будет выполнен, если x отличается от всех значений
}
Рассмотрим следующий пример, в котором отображается название дня недели.
var d = new Date();
switch(d.getDay()) {
case 0:
alert("Today is Sunday.");
break;
case 1:
alert("Сегодня понедельник.");
break;
case 2:
alert("Сегодня вторник.");
break;
case 3:
alert("Сегодня среда.");
break;
case 4:
alert("Today is Thursday.");
break;
case 5:
alert("Сегодня пятница.");
break;
case 6:
alert("Сегодня суббота.");
break;
default:
alert("Информация о сегодняшнем дне недоступна.");
break;
}
Метод getDay()
возвращает день недели в виде числа от 0 до 6, где 0 представляет воскресенье. Подробнее см. Руководство по работе с датами и временем в JavaScript, чтобы узнать больше об этих методах.
В операторе switch…case значение выражения или переменной сравнивается со значением case с помощью оператора строгого равенства (===
). Это означает, что если x = "0"
, это не соответствует case 0:
, потому что их типы данных не равны.
У оператора switch … case
есть существенное отличиет от оператора if … else
. Оператор switch
выполняется построчно (то есть оператор за оператором), и как только JavaScript находит case
, который оценивается как true
, он не только выполняет код, соответствующий этому предложению case
, но также выполняет все последующие case
до конца автоматически.
Чтобы предотвратить это, вы должны включать оператор break
после каждого case
(как вы можете видеть в приведенном выше примере). Оператор break
указывает интерпретатору JavaScript выйти из блока оператора switch … case
после выполнения кода, связанного с первым истинным условием.
Однако оператор break
не требуется для последнего case
, т.е. default
. Хотя, это хорошая практика программирования — завершать последнее условие. Это предотвращает возможную ошибку программирования позже, если к оператору switch
будет добавлен другой оператор case
.
Условие default
не обязательно должно быть последним, которое появляется в операторе switch
. Вот пример, где default
не является последним условием.
var d = new Date();
switch(d.getDay()) {
default:
alert("Ждем выходных.");
break;
case 6:
alert("Today is Saturday.");
break;
case 0:
alert("Сегодня воскресенье.");
}
Совместное использование нескольких Cases
Каждое значение должно быть уникальным в инструкции switch
, но при этом несколько сases
могут использовать одно и то же действие, как показано здесь:
var d = new Date();
switch(d.getDay()) {
case 1:
case 2:
case 3:
case 4:
case 5:
alert("It is a weekday.");
break;
case 0:
case 6:
alert("Это выходной день.");
break;
default:
alert("Enjoy every day of your life.");
}