Тернарный оператор (также известный как условный оператор) в JavaScript — это сокращённая форма записи оператора ветвления if...else
. Он позволяет компактно выразить условие и присвоить результат вычислений в зависимости от результата проверки условия.
Формат тернарного оператора:
условие ? выражение_если_истина : выражение_если_ложь
Компактность и простота
Главное преимущество тернарного оператора заключается в лаконичности и простоте выражения простого ветвления. Вместо длинного блока if...else
можно записать одно короткое выражение.
Вот пример с использованием конструкции if / else
:
Пример
До:
if (authenticated) {
renderApp();
} else {
renderLogin();
}
Тот же самый пример с использованием тернарного оператора:
Пример
С тернарным оператором:
authenticated ? renderApp() : renderLogin();
Структура тернарного оператора
- Условие: Логическое выражение, проверяемое оператором.
- ?:: После условия ставится знак вопроса, далее идёт первое выражение (которое выполняется, если условие истинно).
- :: Затем двоеточие отделяет второе выражение (оно выполняется, если условие ложно).
Несколько примеров:
// Возврат абсолютного значения числа
const num = -5;
const absNum = num >= 0 ? num : -num;
console.log(absNum); // выведет 5
// Проверка возраста
const age = 17;
const canVote = age >= 18 ? true : false;
console.log(canVote); // выведет false
Тернарный оператор и множественное ветвление
Хотя тернарный оператор предназначен для двух возможных путей исполнения, его можно вложить, создавая цепочку проверок:
Пример
const grade = 85;
const result = grade > 90 ? "Отлично" :
grade > 80 ? "Хорошо" :
grade > 70 ? "Средне" :
"Нужно стараться!";
console.log(result); // выведет "Хорошо"
Советы по использованию
- Используйте аккуратно: Будьте внимательны при вложенном применении тернарных операторов, чтобы сохранить читаемость кода.
- Преимущественно короткие условия: Применяйте тернарный оператор для небольших выражений, где логика простая и очевидная.
- Не заменяйте везде
if..else
: Если структура требует более сложного ветвления или обработки ошибок, предпочтительнее обычный блокif...else
.