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 будет вычисляться так:
- Сначала !a
- Потом (!a) && b
- Потом ((!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 или пустая строка — это валидные значения, они будут проигнорированы.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ