Оператор switch
if / else хорош для да/нет или диапазона. Иногда вопрос другой: какое из нескольких фиксированных значений? Код дня 1…7, статус "ok" / "warn" / "err", ключ меню. Для такой формы switch — чистый инструмент. Ветвление вы уже знаете; здесь сопоставляете одно значение с несколькими помеченными case.
Что делает switch?
switch смотрит на одно выражение в скобках. Сравнивает это значение с меткой каждого case. При совпадении выполняются операторы этого пути. break выходит из switch, чтобы следующие case не выполнялись. default — запасной путь, если ничего не совпало.
Части одним взглядом
📊 Повседневные части switch
| Ключевое слово | Обычное чтение | Типичное использование |
|---|---|---|
switch |
посмотри на это значение… | открыть выбор |
case |
если равно этой метке… | один фиксированный вариант |
break |
остановись здесь; выйди из switch | закончить после совпадения |
default |
если ничего не совпало… | запасной путь |
Сравнение по строгому равенству (идея ===). Числовой case не совпадёт со строкой цифр. Держите значение и метки в одной «форме».
let day = 3;
switch (day) {
case 1:
console.log("Mon");
break;
case 2:
console.log("Tue");
break;
case 3:
console.log("Wed");
break;
default:
console.log("other");
}
Одно значение, несколько помеченных путей
Здесь day равен 3, поэтому выполняется путь case 3, и консоль печатает Wed. Случаи 1 и 2 проверены и пропущены. После break switch закончен — default не выполняется.
Без break JavaScript продолжит тела следующих case. Это называют fall-through. Новичкам почти всегда нужен break после каждого завершённого case.
let day = 2;
switch (day) {
case 1:
console.log("Mon");
case 2:
console.log("Tue");
case 3:
console.log("Wed");
break;
default:
console.log("other");
}
Без break выполняются и следующие case
day равен 2. Совпадение начинается с case 2, печатается Tue, затем идёт в case 3 и печатает Wed до break. Хотелась одна метка — получились две. Ставьте break под каждым завершённым case, если только намеренно не делите код.
let day = 9;
switch (day) {
case 1:
console.log("Mon");
break;
case 2:
console.log("Tue");
break;
default:
console.log("other");
}
default закрывает «ничего из этого»
day равен 9. Ни один case не совпал, поэтому выполняется default и вы видите other. Используйте default, когда неожиданные значения всё равно нуждаются в безопасном сообщении. Опускайте только если тишина допустима.
let status = "warn";
switch (status) {
case "ok":
console.log("green");
break;
case "warn":
console.log("yellow");
break;
case "err":
console.log("red");
break;
default:
console.log("unknown");
}
Case могут быть и строками
status равен "warn", поэтому вы видите yellow. Строковые case обычны для коротких кодов из формы или API. Диапазоны вроде «оценка от 60 до 90» остаются у if / else if — switch хочет дискретные метки.
let day = 1;
let label;
switch (day) {
case 1:
label = "Mon";
break;
case 2:
label = "Tue";
break;
default:
label = "other";
}
console.log(label);
Назовите результат совпадения
Задайте label внутри каждого case (и в default), затем используйте один раз. Здесь label становится "Mon". Тот же приём, что с if / else — сначала выбор, потом использование.
Покажите выбранный путь на странице
Соберите короткое сообщение через switch и запишите его на страницу.
<!DOCTYPE html>
<html>
<head>
<title>Switch — page choice</title>
</head>
<body>
<p id="out">…</p>
<script>
let day = 3;
let msg;
switch (day) {
case 1:
msg = "Mon";
break;
case 2:
msg = "Tue";
break;
case 3:
msg = "Wed";
break;
default:
msg = "other";
}
let box = document.getElementById("out");
box.textContent = "day=" + msg;
</script>
</body>
</html>
day равен 3, страница показывает day=Wed. Поставьте day в 9, обновите — должен появиться day=other. Следующий урок (for) повторяет работу много раз; для «какая фиксированная метка?» инструментом остаётся switch.
Попробуйте сами
- Соберите
switchнаlet day = 1, который логирует"Mon"для case1. - Добавьте case для
2и3сbreakпосле каждого. - Поставьте
dayв9и убедитесь, чтоdefaultлогирует"other". - Переключитесь по строке
statusс"ok","warn","err". - Временно уберите один
breakи посмотрите fall-through в консоли. - В HTML-демо измените только
day, обновите, прочитайте новый текстday=.
Частые ошибки
- Забыть
breakпосле case (выполняются и следующие) - Использовать
switchдля открытых диапазонов (score >= 60) — лучшеif/else if - Смешивать типы так, что число никогда не совпадёт со строковым case
- Опускать
default, когда неизвестные значения всё ещё нуждаются в сообщении - Заменять каждый
ifнаswitch, когда проверка — не список фиксированных меток
Кратко
switchсопоставляет одно значение с несколькими меткамиcasebreakостанавливает switch после совпаденияdefaultвыполняется, когда ничего не совпало- Лучше для дискретных значений; диапазоны остаются у
if/else if - Сохраните метку, если результат нужен позже; при необходимости покажите на странице
- Дальше: цикл for — повторить работу заданное число раз
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху