Каждой программе нужно уметь реагировать. Пользователь нажимает кнопку. API возвращает данные. Поле формы очищается. Без возможности ветвления ваш код выполнялся бы строго строка за строкой, независимо от того, что происходит на самом деле. Условные операторы дают JavaScript эту способность выбирать. Они являются «принимающими решения» внутри ваших функций, стражами, которые определяют, что будет выполнено, а что — пропущено. Как только вы научитесь писать их правильно, вы перестанете создавать жесткие скрипты и начнете строить программное обеспечение, которое действительно откликается на действия.

Почему условные операторы важны

Управление потоком выполнения — это основа логики. Вы используете условные операторы, чтобы проверить пароли перед их отправкой на сервер. Вы проверяете, пуста ли корзина покупок, прежде чем рассчитывать налог. Вы определяете, произошла ли ошибка сетевого запроса, чтобы показать сообщение об ошибке вместо пустого экрана. Все эти сценарии опираются на одну и ту же простую идею: оценить что-то, а затем действовать соответствующим образом.

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

Базовый оператор if

Самое простое место для начала — это одиночный if. Он говорит: «если это условие истинно, выполни эту работу». И всё. Никаких запасных вариантов, никаких альтернативных путей.

if (x % 2 === 0) {
    console.log("Even");
}

В этом фрагменте кода оператор взятия остатка проверяет, делится ли x на два без остатка. Если остаток равен нулю, в консоль выводится строка. Если x нечетное, ничего не происходит. Блок игнорируется, и выполнение продолжается дальше.

Это «тихое игнорирование» важно. Иногда вам нужно защитить только одно конкретное действие. Возможно, вы хотите добавить CSS-класс кнопке только тогда, когда она активна, или добавить элемент в массив только в том случае, если поле ввода не пустое. Одиночный оператор if справляется с такими моментами, не заставляя вас писать лишнюю логику.

Добавление альтернативы с помощью if-else

У реальных решений обычно есть две стороны. Либо пользователь достаточно взрослый, либо нет. Либо платеж прошел успешно, либо произошла ошибка. Структура if-else охватывает оба варианта.

if (age >= 18) {
    console.log("Adult");
} else {
    console.log("Not an Adult");
}

Блок else перехватывает всё, что было отклонено первым условием. Он создает четкое бинарное разветвление. Этот паттерн хорошо работает для переключателей (toggles), проверки прав доступа и флагов функций (feature flags). Старайтесь держать логику внутри каждого блока сфокусированной. Если вы замечаете, что нагромождаете слишком много задач в одну ветку, это обычно сигнал к тому, что работу пора разделить на более мелкие функции.

Проверка нескольких путей с помощью else if

Жизнь редко предлагает только два варианта. Вам может понадобиться классифицировать число как положительное, отрицательное или ноль. Вы можете назначать тариф на доставку в зависимости от весовых категорий. Для упорядоченного сравнения нескольких условий используйте else if.

if (x > 0) {
    console.log("Positive");
} else if (x < 0) {
    console.log("Negative");
} else {
    console.log("Zero");
}

JavaScript оценивает их сверху вниз. Как только одно условие выполняется, запускается соответствующий блок, а остальные игнорируются. Порядок имеет значение. Если вы проверите x > 0 после проверки x > 100, более строгое условие никогда не сработает, так как менее строгое перехватит его первым. Думайте об else if как о списке приоритетов.

Оператор switch

Когда вы сравниваете одно значение со множеством отдельных вариантов, длинная цепочка операторов else if может казаться избыточной. Оператор switch наводит в этом порядок. Он сопоставляет выражение с ветками case и выполняет соответствующий блок.

switch (true) {
    case marks >= 90:
        Branch = "Computer science";
        break;
    case marks >= 80:
        Branch = "Mechanical";
        break;
    default:
        Branch = "Other";
}

В этом примере используется switch(true) для прямой оценки булевых условий, что является распространенным паттерном в JavaScript, когда логика опирается на диапазоны, а не на точное равенство. Ключевое слово break крайне важно. Без него выполнение «провалится» в следующий case, независимо от того, подходит он или нет, что редко является желаемым результатом. Блок default действует как финальный else, перехватывая всё, что не подошло под предыдущие случаи.

switch раскрывает свой потенциал, когда у вас есть четкие, фиксированные варианты. Его часто проще просмотреть глазами, чем высокий стек блоков else if, особенно когда каждая ветка просто присваивает значение или вызывает одну функцию.

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

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

const result = (age >= 18) ? "Eligible" : "Not eligible";

Его можно использовать для быстрых присваиваний или возвратов (returns) в одну строку. Он хорошо работает, когда результатом является простое выражение. Не поддавайтесь искушению вкладывать тернарные операторы друг в друга на три уровня и более. Вложенный тернарный оператор может сэкономить строки, но он ценой читаемости. Когда ваша логика разрастается, блок if-else обычно будет более дружелюбным к следующему разработчику, который откроет ваш файл.

Вложенные решения

Сложная логика иногда требует уточняющих вопросов. Вы можете вложить один if в другой if, чтобы уточнить решение.

if (weather === "sunny") {
    if (temp > 30) {
        console.log("