JavaRush /Курсы /Модуль 1: Web Core /Логические операторы: &&...

Логические операторы: &&, ||, !

Модуль 1: Web Core
20 уровень , 8 лекция
Открыта

1. Введение

Давайте представим, что вы охранник в клубе. Вас интересует, чтобы посетитель был старше 18 лет и был трезв. Или, например, чтобы он был в костюме или надел галстук. В программировании такие ситуации встречаются постоянно.

Логические операторы позволяют комбинировать несколько условий в одно сложное. Это как строить сложные фразы: «Если сегодня выходной или у меня отпуск, я не иду на работу». Или: «Если есть деньги и есть время, пойду в кино».

В JavaScript для этого есть три основных логических оператора:

  • && — логическое И (AND)
  • || — логическое ИЛИ (OR)
  • ! — логическое НЕ (NOT)

Давайте разбираться с каждым по порядку.

2. Оператор && — Логическое И

Этот оператор работает как строгий учитель: оба условия должны быть истинны, чтобы результат был истинен.

Синтаксис:

условие1 && условие2

Пример:

let age = 20;
let sober = true;

if (age >= 18 && sober) {
  console.log("Добро пожаловать в клуб!");
} else {
  console.log("Вход запрещён.");
}

Как это работает:
Если age >= 18 и sober оба истинны (true), то выполнится первая ветка.
Если хотя бы одно из условий ложно (false), результат всего выражения — false.

Таблица истинности для &&:

Условие 1 Условие 2 Результат (&&)
true true true
true false false
false true false
false false false

Аналогия:
&& — это как "и" в русском языке: "Я пойду гулять, если будет тепло и не будет дождя".

3. Оператор || — Логическое ИЛИ

Этот оператор менее строгий: ему достаточно, чтобы хотя бы одно из условий было истинно.

Синтаксис:

условие1 || условие2

Пример:

let hasSuit = false;
let hasTie = true;

if (hasSuit || hasTie) {
  console.log("Вы проходите на вечеринку!");
} else {
  console.log("Дресс-код не соблюдён.");
}

Как это работает:
Если хотя бы одно из условий истинно (true), результат всего выражения — true.
Только если оба условия ложны, результат — false.

Таблица истинности для ||:

Условие 1 Условие 2 Результат (||)
true true true
true false true
false true true
false false false

Аналогия:
|| — это как "или" в русском языке: "Я куплю мороженое, если будет жарко или мне просто захочется сладкого".

4. Оператор ! — Логическое НЕ

Этот оператор меняет значение на противоположное: если было true, станет false, и наоборот.

Синтаксис:

 ! условие

Пример:

let isRaining = false;

if (!isRaining) {
  console.log("Можно идти гулять!");
} else {
  console.log("Берём зонт.");
}

Здесь !isRaining превращает false в true, так что если дождя нет, программа советует гулять.

Таблица истинности для !:

Условие !Условие
true false
false true

Аналогия:
! — это как "не" в русском языке: "Я не голоден" (!hungry).

5. Комбинирование нескольких операторов

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

let age = 25;
let hasTicket = true;
let isBanned = false;

if ((age >= 18 && hasTicket) && !isBanned) {
  console.log("Вход разрешён");
} else {
  console.log("Вход запрещён");
}

Здесь мы требуем сразу три условия:

  • Возраст не меньше 18
  • Есть билет
  • Человек не в чёрном списке (не забанен)

Важный момент:
Скобки (()) помогают явно задать порядок выполнения, как в математике.

6. Приоритет логических операторов

В JavaScript, как и в математике, у операторов есть приоритет:

  • ! (НЕ) — самый высокий
  • && (И) — средний
  • || (ИЛИ) — самый низкий

Это значит, что выражение !a && b || c будет вычисляться так:

  1. Сначала !a
  2. Потом (!a) && b
  3. Потом ((!a) && b) || c

Пример:

let hungry = false;
let tired = true;
let wantCoffee = true;

if (!hungry && tired || wantCoffee) {
  console.log("Пора сделать перерыв!");
}
  • Сначала вычисляется !hungry (true)
  • Потом true && tired (true)
  • Потом true || wantCoffee (true)

Рекомендация:
Если выражение сложное — ставьте скобки! Это не только уменьшит количество багов, но и избавит ваших коллег от головной боли.

7. Логические операторы и неявное преобразование типов

JavaScript иногда любит "помогать" программистам и приводит типы автоматически. Это называется неявное преобразование типов.

В логических выражениях:

  • 0, "" (пустая строка), null, undefined, NaN считаются false
  • Всё остальное считается true

Пример:

if (0 || "hello") {
  console.log("Сработает, потому что 'hello' — это true");
}

Пояснение: 0 — это false, "hello" — это true, значит результат — true.

8. Логические операторы в действии: примеры

Пример 1: Проверка возраста и наличия паспорта

let age = 17;
let hasPassport = true;

if (age >= 18 && hasPassport) {
  console.log("Можете купить билет на поезд");
} else {
  console.log("Покупка невозможна");
}

Пример 2: Вход на сайт для взрослых

let isAdult = false;
let hasParentalPermission = true;

if (isAdult || hasParentalPermission) {
  console.log("Доступ разрешён");
} else {
  console.log("Доступ запрещён");
}

Пример 3: Запретить действие, если пользователь заблокирован

let isBanned = false;

if (!isBanned) {
  console.log("Действие разрешено");
} else {
  console.log("Пользователь заблокирован");
}

Пример 4: Сложное условие

let balance = 1000;
let isVerified = false;
let isAdmin = true;

if ((balance > 0 && isVerified) || isAdmin) {
  console.log("Доступ к операциям открыт");
} else {
  console.log("Доступ запрещён");
}
  • Если пользователь админ — доступ открыт независимо от баланса и верификации.
  • Если не админ — нужен положительный баланс и верификация.

9. Краткие "фишки" логических операторов в JavaScript

"Ленивое вычисление" (Short-circuit evaluation)

Логические операторы в JavaScript вычисляются "лениво":

  • && — если первое условие ложно, второе даже не проверяется.
  • || — если первое условие истинно, второе не проверяется.

Пример:

let user = null;

// Если user не null, вывести имя
if (user && user.name) {
  console.log(user.name);
}

Если user — это null, то user.name не будет вычисляться, и ошибки не возникнет.

Использование логических операторов для присваивания значений по умолчанию

Пример:

let input = "";
let value = input || "Значение по умолчанию";
console.log(value); // "Значение по умолчанию"

Если input — пустая строка (false), то будет использовано второе значение.

10. Типичные ошибки при работе с логическими операторами

Ошибка №1: Путаница между && и ||
Очень часто новички ошибаются, думая, что || — это "и", а && — это "или". Если не уверены — читайте условие вслух: "Если возраст больше 18 и есть паспорт" — это &&.

Ошибка №2: Забыли скобки в сложных выражениях
Когда в одном условии много операторов, легко запутаться. Скобки спасают от неожиданных результатов. Например, a && b || c не то же самое, что a && (b || c).

Ошибка №3: Использование логических операторов с неboolean значениями
JavaScript считает 0, "", null, undefined, NaN — ложью, а всё остальное — истиной. Иногда это приводит к неожиданным результатам, особенно при проверке строк или чисел.

Ошибка №4: Сравнение булевых значений с true и false
Не нужно писать так: if (isActive === true), достаточно if (isActive). Аналогично, вместо if (isActive === false) используйте if (!isActive).

Ошибка №5: Ожидание, что оба условия всегда проверяются
В выражении a && b, если a — ложь, b даже не проверяется. Это иногда приводит к неожиданностям, особенно если во втором условии есть функция с побочным эффектом.

Ошибка №6: Некорректное использование логических операторов для присваивания
Когда используете || для значений по умолчанию, будьте осторожны: если ожидается, что 0 или пустая строка — это валидные значения, они будут проигнорированы.

1
Задача
Модуль 1: Web Core, 20 уровень, 8 лекция
Недоступна
Приватные поля Person
Приватные поля Person
1
Задача
Модуль 1: Web Core, 20 уровень, 8 лекция
Недоступна
Приватные поля Car
Приватные поля Car
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ