5. Условный оператор, тернарный оператор


// Синтаксис: условие ? значение_если_true : значение_если_false

let age = 18;
let status = age >= 18 ? "взрослый" : "ребенок";
console.log(status); // "взрослый"

// Можно использовать для присваивания
let price = 100;
let discount = price > 50 ? 10 : 0;
let finalPrice = price - discount;
console.log(finalPrice); // 90

// Вложенные тернарные операторы (снижает читаемость)
let score = 85;
let grade = score >= 90 ? "5" :
            score >= 80 ? "4" :
            score >= 70 ? "5" :
            score >= 60 ? "2" : "1";
console.log(grade); // "4"

// Альтернатива с if-else
if (score >= 90) {
  grade = "A";
} else if (score >= 80) {
  grade = "B";
} // и т.д.

Конструкция if...else — одна из фундаментальных конструкций в программировании. Она позволяет выполнять различные действия в зависимости от выполнения условий.

Простая аналогия из жизни: «Если идет дождь, то возьми зонт, иначе возьми солнечные очки».

Базовый синтаксис

Простой if

if (условие) {
  // код, который выполнится, если условие истинно (true)
}

let temperature = 25;

if (temperature > 20) {
  console.log("На улице тепло, можно идти без куртки");
}

if...else

if (условие) {
  // код, если условие истинно
} else {
  // код, если условие ложно
}

let age = 17;

if (age >= 18) {
  console.log("Доступ разрешен");
} else {
  console.log("Доступ запрещен: вам нет 18 лет");
}

if...else if...else (цепочка условий)

if (условие1) {
  // код, если условие1 истинно
} else if (условие2) {
  // код, если условие1 ложно, но условие2 истинно
} else if (условие3) {
  // код, если условие1 и условие2 ложны, но условие3 истинно
} else {
  // код, если все условия ложны
}

Логические выражения

let x = 10;
let y = 5;

// Простые сравнения
if (x > y) { /* ... */ }
if (x < y) { /* ... */ }
if (x >= y) { /* ... */ }
if (x <= y) { /* ... */ }
if (x === y) { /* ... */ } // строгое равенство
if (x !== y) { /* ... */ } // строгое неравенство

Логические операторы в условиях

let age = 25;
let hasLicense = true;

// И (AND) - &&
if (age >= 18 && hasLicense) {
  console.log("Можно водить машину");
}

// ИЛИ (OR) - ||
if (age < 14 || age > 70) {
  console.log("Можно получить скидку");
}

// НЕ (NOT) - !
let isRaining = false;
if (!isRaining) {
  console.log("Можно идти гулять");
}

Сложные условия

let time = 14;
let day = "понедельник";

// Комбинирование операторов
if (time >= 9 && time < 18 && day !== "суббота" && day !== "воскресенье") {
  console.log("Офис открыт");
}

Truthy и Falsy значения

JavaScript автоматически преобразует значения к логическому типу в условиях:

Falsy значения (преобразуются в false):

  • false
  • 0
  • "" (пустая строка)
  • null
  • undefined
  • NaN

Truthy значения (преобразуются в true):

Все остальные, включая:

  • "0" (строка с нулем)
  • "false" (строка)
  • [] (пустой массив)
  • {} (пустой объект)
  • любое ненулевое число
let name = ""; // пустая строка - falsy

if (name) {
  console.log("Привет, " + name);
} else {
  console.log("Имя не указано"); // Выполнится это
}

// Проверка существования переменной
let user;

if (user) {
  console.log("Пользователь существует");
} else {
  console.log("Пользователь не определен"); // Выполнится это
}

Вложенные условия

let age = 25;
let hasLicense = true;
let hasCar = false;

if (age >= 18) {
  if (hasLicense) {
    if (hasCar) {
      console.log("Можно ехать на машине");
    } else {
      console.log("Можно водить, но машины нет");
    }
  } else {
    console.log("Нужно получить права");
  }
} else {
  console.log("Слишком молод для вождения");
}

// Альтернатива с логическими операторами (более читаемая)
if (age >= 18 && hasLicense && hasCar) {
  console.log("Можно ехать на машине");
} else if (age >= 18 && hasLicense) {
  console.log("Можно водить, но машины нет");
} else if (age >= 18) {
  console.log("Нужно получить права");
} else {
  console.log("Слишком молод для вождения");
}

Оператор switch (для множества сравнений одного значения)

let day = "понедельник";
let dayType;

switch (day) {
  case "понедельник":
  case "вторник":
  case "среда":
  case "четверг":
  case "пятница":
    dayType = "рабочий день";
    break;
  case "суббота":
  case "воскресенье":
    dayType = "выходной";
    break;
  default:
    dayType = "неизвестный день";
}

// Эквивалентно с if...else if:
if (day === "понедельник" || day === "вторник" || day === "среда" || 
    day === "четверг" || day === "пятница") {
  dayType = "рабочий день";
} else if (day === "суббота" || day === "воскресенье") {
  dayType = "выходной";
} else {
  dayType = "неизвестный день";
}