Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Конструкция 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.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.