Конструкция switch
Когда одно значение нужно сравнить с длинным списком вариантов, цепочка else if становится громоздкой. Для таких случаев есть конструкция switch — она сравнивает значение с каждым вариантом по очереди.
Как устроен switch
В скобках после switch пишут проверяемое значение, а каждый вариант начинают словом case. Выполняется код того варианта, который совпал со значением:
const color = 'green';
switch (color) {
case 'red':
console.log('Стой');
break;
case 'green':
console.log('Иди'); // Иди
break;
}Слово break завершает switch: после него программа продолжает работу с кода, который идёт за закрывающей скобкой.
default
Блок default выполняется, если ни один вариант не подошёл. Это аналог else в обычном условии:
const status = 500;
switch (status) {
case 200:
console.log('OK');
break;
case 404:
console.log('Не найдено');
break;
default:
console.log('Неизвестный статус'); // Неизвестный статус
}default обычно ставят последним, поэтому break после него не нужен.
Несколько вариантов с одним кодом
Если для нескольких значений нужно выполнить одно и то же, их варианты пишут подряд, а код — один раз, под последним:
const day = 'суббота';
switch (day) {
case 'суббота':
case 'воскресенье':
console.log('Выходной'); // Выходной
break;
default:
console.log('Рабочий день');
}Пустой case 'суббота': не содержит кода, поэтому выполнение переходит к следующему варианту.
Сравнение строгое
switch сравнивает значения как оператор === — с учётом типа. Строка '1' не совпадёт с числом 1:
const choice = '1';
switch (choice) {
case 1:
console.log('Выбран первый пункт');
break;
default:
console.log('Неизвестный выбор'); // Неизвестный выбор
}Данные из формы приходят строками, поэтому сначала превратите их в число через Number() или пишите варианты строками.
switch или if
switch удобен, когда одна переменная сравнивается на равенство с конкретными значениями: код команды, день недели, статус заказа. Для диапазонов вроде «больше 90» он не подходит — там нужен if с else if.
Частая ошибка
Если забыть break, выполнение «провалится» в следующий вариант, и его код тоже выполнится, хотя значение не совпало:
const level = 'easy';
switch (level) {
case 'easy':
console.log('Лёгкий уровень'); // Лёгкий уровень
case 'hard':
console.log('Сложный уровень'); // Сложный уровень
}Проверяйте, что каждый вариант с кодом заканчивается словом break.