← JavaScript/Условия: if/else#53 из 383← ПредыдущийСледующий →+20 XP
Полезно по теме:Гайд: как учить JavaScriptПрактика: JS базаПрактика: async и сетьТермин: Closure

Условия: if/else

Когда ты открываешь Spotify, он решает: показать бесплатную рекламу или нет? Есть подписка — играй без рекламы, нет — прерывай каждые три трека. Когда Delivery Club рассчитывает доставку: бесплатно при заказе от 500 рублей, иначе — 99 рублей. Это всё работа if/else.

На основе предыдущих уроков

Операторы сравнения из урока 04 возвращают true или false. Условия if/else используют эти результаты чтобы выбрать какой код выполнить.

Какую проблему решают условия?

Программа должна вести себя по-разному в зависимости от ситуации. Без условий код всегда делал бы одно и то же — это бесполезно в реальных приложениях.

Синтаксис if/else

if (условие) {
  // выполнится если условие === true
} else if (другое условие) {
  // выполнится если первое false, а это true
} else {
  // выполнится если все условия выше false
}

Важно: JS проверяет условия сверху вниз и останавливается на первом true.

Тернарный оператор — условие в одну строку

Для коротких условий есть компактная запись:

const label = age >= 18 ? 'Взрослый' : 'Ребёнок'
//            условие   ? если true  : если false

Используй тернарный оператор когда выбираешь между двумя значениями. Для сложной логики — if/else читаемее.

Truthy и Falsy значения

В условии JS преобразует любое значение в boolean. Falsy (ведут себя как false):

  • false, 0, '' (пустая строка), null, undefined, NaN
  • Всё остальное — truthy (ведёт себя как true):

  • '0', [], {}, любое ненулевое число, любая непустая строка
  • if (cartItems.length) {  // 0 — falsy, 3 — truthy
      showCheckoutButton()
    }

    Типичные ошибки

    Ошибка 1: Перепутать = и === в условии

    let status = 'pending'
    if (status = 'active') {  // Присваивание! Всегда true — это баг!
      console.log('активен')  // выполнится даже если status был 'pending'
    }
    // Правильно:
    if (status === 'active') { ... }

    Ошибка 2: Недостижимое условие — неверный порядок

    function getLevel(score) {
      if (score >= 0) return 'Начальный'     // всегда сработает первым!
      if (score >= 50) return 'Средний'      // никогда не достигнется
      if (score >= 80) return 'Продвинутый'  // никогда не достигнется
    }
    // Правильно: проверяй от большего к меньшему
    function getLevel(score) {
      if (score >= 80) return 'Продвинутый'
      if (score >= 50) return 'Средний'
      return 'Начальный'
    }

    Ошибка 3: Тернарный оператор для сложной логики

    // Нечитаемо:
    const msg = a > b ? a > c ? 'a biggest' : 'c biggest' : b > c ? 'b biggest' : 'c biggest'
    // Используй if/else когда больше двух вариантов

    В реальных проектах

    Условия — основа бизнес-логики любого приложения: системы скидок, разграничение прав доступа (admin/user/guest), отображение разного контента в зависимости от статуса пользователя.

    Примеры

    Расчёт скидки и доставки в интернет-магазине

    const cartTotal = 3500
    const userTier = 'gold'    // 'bronze', 'silver', 'gold'
    const isFirstOrder = false
    
    // Система скидок: проверяем от выгоднейшей
    let discountPct = 0
    if (userTier === 'gold' && cartTotal >= 3000) {
      discountPct = 20
    } else if (userTier === 'silver' || cartTotal >= 5000) {
      discountPct = 15
    } else if (isFirstOrder) {
      discountPct = 10
    } else if (cartTotal >= 2000) {
      discountPct = 5
    }
    
    // Стоимость доставки
    const shippingCost = cartTotal >= 2000 ? 0 : 299
    const shippingLabel = shippingCost === 0 ? 'Бесплатная доставка' : `Доставка: ${shippingCost} ₽`
    
    // Итог
    const finalTotal = cartTotal * (1 - discountPct / 100) + shippingCost
    
    console.log(`Скидка: ${discountPct}%`)        // Скидка: 20%
    console.log(shippingLabel)                       // Бесплатная доставка
    console.log(`Итого: ${finalTotal} ₽`)          // Итого: 2800 ₽

    Условия: if/else

    Когда ты открываешь Spotify, он решает: показать бесплатную рекламу или нет? Есть подписка — играй без рекламы, нет — прерывай каждые три трека. Когда Delivery Club рассчитывает доставку: бесплатно при заказе от 500 рублей, иначе — 99 рублей. Это всё работа if/else.

    На основе предыдущих уроков

    Операторы сравнения из урока 04 возвращают true или false. Условия if/else используют эти результаты чтобы выбрать какой код выполнить.

    Какую проблему решают условия?

    Программа должна вести себя по-разному в зависимости от ситуации. Без условий код всегда делал бы одно и то же — это бесполезно в реальных приложениях.

    Синтаксис if/else

    if (условие) {
      // выполнится если условие === true
    } else if (другое условие) {
      // выполнится если первое false, а это true
    } else {
      // выполнится если все условия выше false
    }

    Важно: JS проверяет условия сверху вниз и останавливается на первом true.

    Тернарный оператор — условие в одну строку

    Для коротких условий есть компактная запись:

    const label = age >= 18 ? 'Взрослый' : 'Ребёнок'
    //            условие   ? если true  : если false

    Используй тернарный оператор когда выбираешь между двумя значениями. Для сложной логики — if/else читаемее.

    Truthy и Falsy значения

    В условии JS преобразует любое значение в boolean. Falsy (ведут себя как false):

  • false, 0, '' (пустая строка), null, undefined, NaN
  • Всё остальное — truthy (ведёт себя как true):

  • '0', [], {}, любое ненулевое число, любая непустая строка
  • if (cartItems.length) {  // 0 — falsy, 3 — truthy
      showCheckoutButton()
    }

    Типичные ошибки

    Ошибка 1: Перепутать = и === в условии

    let status = 'pending'
    if (status = 'active') {  // Присваивание! Всегда true — это баг!
      console.log('активен')  // выполнится даже если status был 'pending'
    }
    // Правильно:
    if (status === 'active') { ... }

    Ошибка 2: Недостижимое условие — неверный порядок

    function getLevel(score) {
      if (score >= 0) return 'Начальный'     // всегда сработает первым!
      if (score >= 50) return 'Средний'      // никогда не достигнется
      if (score >= 80) return 'Продвинутый'  // никогда не достигнется
    }
    // Правильно: проверяй от большего к меньшему
    function getLevel(score) {
      if (score >= 80) return 'Продвинутый'
      if (score >= 50) return 'Средний'
      return 'Начальный'
    }

    Ошибка 3: Тернарный оператор для сложной логики

    // Нечитаемо:
    const msg = a > b ? a > c ? 'a biggest' : 'c biggest' : b > c ? 'b biggest' : 'c biggest'
    // Используй if/else когда больше двух вариантов

    В реальных проектах

    Условия — основа бизнес-логики любого приложения: системы скидок, разграничение прав доступа (admin/user/guest), отображение разного контента в зависимости от статуса пользователя.

    Примеры

    Расчёт скидки и доставки в интернет-магазине

    const cartTotal = 3500
    const userTier = 'gold'    // 'bronze', 'silver', 'gold'
    const isFirstOrder = false
    
    // Система скидок: проверяем от выгоднейшей
    let discountPct = 0
    if (userTier === 'gold' && cartTotal >= 3000) {
      discountPct = 20
    } else if (userTier === 'silver' || cartTotal >= 5000) {
      discountPct = 15
    } else if (isFirstOrder) {
      discountPct = 10
    } else if (cartTotal >= 2000) {
      discountPct = 5
    }
    
    // Стоимость доставки
    const shippingCost = cartTotal >= 2000 ? 0 : 299
    const shippingLabel = shippingCost === 0 ? 'Бесплатная доставка' : `Доставка: ${shippingCost} ₽`
    
    // Итог
    const finalTotal = cartTotal * (1 - discountPct / 100) + shippingCost
    
    console.log(`Скидка: ${discountPct}%`)        // Скидка: 20%
    console.log(shippingLabel)                       // Бесплатная доставка
    console.log(`Итого: ${finalTotal} ₽`)          // Итого: 2800 ₽

    Задание

    Ты пишешь функцию для образовательной платформы вроде Skillbox. Функция принимает оценку (0-100) и возвращает уровень: 90-100 — "Отлично", 75-89 — "Хорошо", 60-74 — "Удовлетворительно", ниже 60 — "Нужно больше практики".

    Подсказка

    Начинай с наибольшего диапазона: if (score >= 90). Следующее условие уже знает что score < 90, поэтому пишем if (score >= 75) — не нужно писать score >= 75 && score < 90

    Загружаем среду выполнения...
    Загружаем AI-помощника...