Как работает оператор switch в JavaScript и что он возвращает
Что проверяют
Понимаете ли вы, как switch сравнивает значения и почему он ничего не возвращает. В вопросе подвох: switch это инструкция, а не выражение. Следом просят объяснить провал между case и ошибку с let внутри case.
Как отвечать
Выражение в скобках вычисляется один раз и сравнивается с каждым case строгим равенством ===, сверху вниз. С первого совпадения выполнение идёт дальше, пока не встретит break, return, throw или конец блока.
- возвращаемое значение: его нет.
const x = switch (...)это синтаксическая ошибка, в отличие отswitch-выражений в C# и Java. Значение получают черезreturnвнутри функции или присваивание в каждомcase; - провал (fall-through): без
breakвыполняются и следующиеcase. Иногда это делают намеренно, группируя варианты:case 'png': case 'jpg': return 'image';; default: срабатывает без совпадений и может стоять где угодно, не обязательно последним;- строгость: при
value = '1'веткаcase 1не сработает, приведения типов нет; - общая область видимости: тело
switchэто один блок, поэтомуlet xв двух разныхcaseдастSyntaxError. Лечится фигурными скобками вокруг телаcase.
Для фронтенда покажите знакомое место: редьюсер в useReducer или Redux, где switch (action.type) с return в каждой ветке. И альтернативу: объект-словарь обработчиков часто читается проще длинного switch. В TypeScript switch по размеченному объединению сужает тип, а проверка const _exhaustive: never = action в default ловит забытый вариант при компиляции.
Где спотыкаются
Отвечают, что switch возвращает значение совпавшего case, путая его с тернарным оператором и выражениями из других языков.
Забывают break и не могут объяснить, почему выполнились две ветки подряд.
Ждут нестрогого сравнения и удивляются, что строка из input.value не попадает в числовой case.