Learning Book

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

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

Тернарный оператор — единственный оператор JavaScript с тремя операндами. Краткая запись if/else для выражений.

Синтаксис

условие ? значение_если_true : значение_если_false
const age = 20;
const status = age >= 18 ? 'взрослый' : 'несовершеннолетний';
// Эквивалентно:
// let status;
// if (age >= 18) { status = 'взрослый'; } else { status = 'несовершеннолетний'; }

console.log(status); // 'взрослый'

Тернарный оператор — выражение, не оператор

В отличие от if, тернарный оператор — это выражение (возвращает значение). Это делает его удобным в:

// В присваивании
const label = isLoggedIn ? 'Выйти' : 'Войти';

// В шаблонных литералах
console.log(`Привет, ${user ? user.name : 'Гость'}!`);

// В JSX/Vue шаблонах
// <div>{{ isLoading ? 'Загрузка...' : data.title }}</div>

// В аргументах функции
renderButton({ text: isPremium ? 'Premium' : 'Бесплатный' });

Когда использовать, когда нет

Используйте тернарный оператор когда:

  • Выбор между двумя значениями, логика проста
  • Результат используется в выражении (шаблон, аргумент)
  • Условие и оба варианта помещаются в одну строку

Не используйте когда:

  • Нужно выполнить несколько операций (не просто выбрать значение)
  • Вложенные тернарные операторы — это нечитаемо
// Плохо — вложенный тернарный
const grade = score >= 90 ? 'A' : score >= 80 ? 'B' : score >= 70 ? 'C' : 'F';

// Хорошо — if/else или lookup table
function getGrade(score) {
  if (score >= 90) return 'A';
  if (score >= 80) return 'B';
  if (score >= 70) return 'C';
  return 'F';
}
Правило большого пальца: если тернарное выражение не помещается в одну строку — используйте if/else. Читаемость важнее краткости.

При вложении тернарных операторов они выполняются справа налево:

// Это:
a ? b : c ? d : e

// Эквивалентно:
a ? b : (c ? d : e)

Именно поэтому вложенные тернарные операторы так сложно читать. Форматтеры (Prettier) запрещают их или форматируют очень агрессивно.