Условное ветвление в JavaScript

Условное ветвление в JavaScript #

Ветвление выбирает один из путей выполнения в зависимости от условия. В JavaScript для этого используют if / else, тернарный оператор ? : и switch.


if, else if, else #

function deliveryLabel(distanceKm) {
  if (distanceKm <= 3) {
    return 'пеший курьер'
  } else if (distanceKm <= 15) {
    return 'велокурьер'
  } else {
    return 'авто'
  }
}

deliveryLabel(8) // "велокурьер"

Условие приводится к boolean по правилам truthy/falsy. Для явных сравнений пишите ===, >, <= и т.д.

Одинарную инструкцию можно писать без фигурных скобок, но в командной разработке скобки почти всегда оставляют — меньше риск при правках:

if (isFrozen) return

if (isFrozen) {
  return
}

Тернарный оператор #

Короткая форма «если → иначе» как выражение (возвращает значение):

const seatStatus = ticketsLeft > 0 ? 'available' : 'sold-out'

Вложенные тернарные цепочки быстро теряют читаемость — лучше if или таблица соответствий:

function toneByScore(score) {
  if (score >= 90) return 'excellent'
  if (score >= 70) return 'good'
  if (score >= 40) return 'weak'
  return 'fail'
}

switch #

switch сравнивает выражение с набором case через алгоритм строгого равенства (===):

function httpHint(status) {
  switch (status) {
    case 200:
    case 201:
      return 'успех'
    case 400:
      return 'ошибка клиента'
    case 500:
    case 502:
      return 'ошибка сервера'
    default:
      return 'неизвестный статус'
  }
}

httpHint(201) // "успех"

После совпадения выполнение идёт «насквозь» к следующему case, пока не встретится break или return. Группировка case 200: case 201: — осознанный fall-through.

switch (true) с условиями в case работает, но чаще запутывает; для диапазонов удобнее if.


Ранний возврат вместо глубокой вложенности #

function canPublish(article, user) {
  if (!user) return false
  if (!article.title?.trim()) return false
  if (article.status === 'archived') return false
  return user.role === 'editor' || user.role === 'admin'
}

Плоские проверки с ранним return читаются проще, чем пирамида if внутри if.


Выбор конструкции #

ЗадачаИнструмент
Диапазоны, сложная логикаif / else if
Два простых варианта → значениетернарный ? :
Дискретные значения одного выраженияswitch
Много независимых флаговсерия ранних return / if

Итог #

  • if — универсальный способ ветвления.
  • Тернарный оператор хорош для коротких выражений, не для бизнес-логики на пол-экрана.
  • switch удобен для набора точных значений; не забывайте break или return.
  • Ранний выход уменьшает вложенность и упрощает сопровождение.

См. также #

Часто спрашивают

Чем let отличается от const?
Оба блочные. let допускает повторное присваивание, const — нет (содержимое объекта при этом можно менять). Подробнее
Зачем нужен use strict?
Строгий режим ловит случайные глобалы и делает this у «голых» вызовов равным undefined; в ES-модулях он включён по умолчанию. Подробнее
Почему лучше писать ===, а не ==?
=== не приводит типы молча; == запускает сложные правила приведения и чаще даёт неожиданный результат. Подробнее