Логические значения и сравнения
5 == "5" даёт true, а 5 === "5" даёт false. Тройной знак равенства проверяет ещё и то, что обе стороны одного типа.
Вопросы с ответом «да» или «нет»
Программы постоянно задают вопросы. Достаточно ли длинный пароль? Закончились ли у игрока жизни? Сегодня выходной? У каждого такого вопроса один из двух ответов, и JavaScript представляет их двумя логическими значениями, true и false. Логический тип (boolean) назван в честь Джорджа Буля, математика 19 века, который построил алгебру истины и лжи. Сами по себе они не очень интересны, но именно они позволяют программе принимать решения, и об этом следующий урок.
Операторы сравнения
Сравнение берёт два значения и даёт логическое значение. Шесть самых нужных приведены ниже. Обрати внимание, что «равно» пишется тремя знаками равенства, потому что одиночный = уже значит «сохрани значение».
| Оператор | Вопрос | Пример | Результат |
|---|---|---|---|
| === | равно? | 4 === 4 | true |
| !== | не равно? | 4 !== 4 | false |
| < | меньше? | 3 < 8 | true |
| > | больше? | 3 > 8 | false |
| <= | меньше или равно? | 8 <= 8 | true |
| >= | больше или равно? | 7 >= 8 | false |
Как и арифметика, сравнение является выражением, поэтому его можно напечатать или сохранить в переменной: const isAdult = age >= 18; кладёт в isAdult true или false в зависимости от возраста. Имена логических переменных часто начинают с is, has или can, и тогда код читается как вопрос.
Почему ===, а не ==
В JavaScript есть и двойной знак равенства ==, нестрогое равенство. Перед сравнением он пытается привести обе стороны к одному типу, и результаты трудно предсказать: 5 == "5" даёт true, и 0 == "" тоже. Тройной знак ===, строгое равенство, ничего не преобразует. Если типы разные, ответ просто false. MDN и большинство руководств по стилю советуют === и !== для повседневного кода, и в этом курсе мы используем их везде.
console.log(5 === 5); // true
console.log(5 === "5"); // false
// нестрогое равенство, лучше избегать:
console.log(5 == "5"); // true
console.log("cat" !== "dog"); // trueСтроки тоже можно сравнивать. === проверяет, что в двух строках ровно одни и те же символы с учётом заглавных, так что "Yes" === "yes" даёт false. Операторы < и > сравнивают строки символ за символом по кодам символов, а для слов из строчных букв это близко к словарному порядку: "apple" < "banana" даёт true. В этом порядке заглавные буквы идут раньше всех строчных, поэтому "Zebra" < "apple" тоже даёт true.
Объединение ответов с помощью &&, || и !
У настоящих вопросов часто несколько частей. Для аттракциона может требоваться рост не меньше 120 см и возраст не меньше 8 лет. JavaScript соединяет логические ответы логическими операторами. && (и) даёт true, только когда обе стороны true. || (или) даёт true, когда хотя бы одна сторона true. ! (не) переворачивает логическое значение, так что !true даёт false.
const height = 130;
const age = 7;
console.log(height >= 120 && age >= 8); // false
console.log(height >= 120 || age >= 8); // true
console.log(!(age >= 8)); // trueРазобранный пример. Выходной ли день? day === "Sat" || day === "Sun". Обрати внимание: day === нужно повторить с обеих сторон. Запись day === "Sat" || "Sun" кажется естественной, но делает не то, что ты имеешь в виду, потому что "Sun" само по себе не является сравнением. Сравнения вычисляются раньше && и ||, поэтому height >= 120 && age >= 8 не нуждается в лишних скобках, хотя добавить их никогда не вредно.
Ещё одна идея, которую ты встретишь позже: когда JavaScript нужно логическое значение, а он получает другое, несколько значений он считает ложными. Эти ложные (falsy) значения: false, 0, пустая строка "", null, undefined и NaN. Всё остальное, включая строки "0" и "false", считается истинным.
и && требует, чтобы обе стороны были true. или || требует одну true. не ! переворачивает ответ.
| boolean | true или false |
| === | Строгое равенство: то же значение и тот же тип |
| !== | Строгое неравенство: не одно и то же |
| == | Нестрогое равенство: сначала преобразует типы (избегай) |
| && | и: true, только если обе стороны true |
| || | или: true, если хотя бы одна сторона true |
| ! | не: меняет true и false местами |
| ложные значения (falsy) | false, 0, "", null, undefined и NaN |
- Что выведет этот код?
console.log(7 > 7);- true
- false
- Что выведет этот код?
console.log(7 >= 7);- true
- false
- Что выведет этот код?
console.log(3 === "3");- true
- false
- Что выведет этот код?
console.log(3 == "3");- true
- false
- Что выведет этот код?
console.log(true && false);- true
- false
- Что выведет этот код?
console.log(true || false);- true
- false
- Что выведет этот код?
const x = 12; console.log(x > 10 && x < 20);- true
- false
- Что выведет этот код?
console.log(!(5 > 2));- true
- false
- Что выведет этот код?
console.log("Yes" === "yes");- true
- false
- Что выведет этот код?
console.log("apple" < "banana");- true
- false
- Какое значение ложное (falsy)?
"0"0"false"
- Какая запись правильно проверяет, что day равно "Sat" или "Sun"?
day === "Sat" || "Sun"day === "Sat" || day === "Sun"day === "Sat" && day === "Sun"
- Сравнения дают true или false.
- Используй === и !==; == преобразует типы и преподносит сюрпризы.
- && требует обе, || требует одну, ! переворачивает.
- Повторяй полное сравнение с каждой стороны || и &&.
- Ложные значения: false, 0, "", null, undefined, NaN.
Источники курса (2)
- MDN Web Docs, JavaScript Guide (developer.mozilla.org/en-US/docs/Web/JavaScript/Guide, chapters Introduction, Grammar and types, Control flow, Loops and iteration, Functions, Expressions and operators, Numbers and strings, Indexed collections, Working with objects; checked 2026-10-17)
- Ecma International, ECMA-262 ECMAScript 2026 Language Specification, 17th edition, June 2026 (tc39.es/ecma262 and ecma-international.org/publications-and-standards/standards/ecma-262, checked 2026-10-17)
Проверено: 2026-10-17