edubun
Русский

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

5 == "5" даёт true, а 5 === "5" даёт false. Тройной знак равенства проверяет ещё и то, что обе стороны одного типа.

Вопросы с ответом «да» или «нет»

Программы постоянно задают вопросы. Достаточно ли длинный пароль? Закончились ли у игрока жизни? Сегодня выходной? У каждого такого вопроса один из двух ответов, и JavaScript представляет их двумя логическими значениями, true и false. Логический тип (boolean) назван в честь Джорджа Буля, математика 19 века, который построил алгебру истины и лжи. Сами по себе они не очень интересны, но именно они позволяют программе принимать решения, и об этом следующий урок.

Операторы сравнения

Сравнение берёт два значения и даёт логическое значение. Шесть самых нужных приведены ниже. Обрати внимание, что «равно» пишется тремя знаками равенства, потому что одиночный = уже значит «сохрани значение».

ОператорВопросПримерРезультат
===равно?4 === 4true
!==не равно?4 !== 4false
<меньше?3 < 8true
>больше?3 > 8false
<=меньше или равно?8 <= 8true
>=больше или равно?7 >= 8false

Как и арифметика, сравнение является выражением, поэтому его можно напечатать или сохранить в переменной: 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. не ! переворачивает ответ.

booleantrue или false
===Строгое равенство: то же значение и тот же тип
!==Строгое неравенство: не одно и то же
==Нестрогое равенство: сначала преобразует типы (избегай)
&&и: true, только если обе стороны true
||или: true, если хотя бы одна сторона true
!не: меняет true и false местами
ложные значения (falsy)false, 0, "", null, undefined и NaN
  1. Что выведет этот код?
    console.log(7 > 7);
    • true
    • false
  2. Что выведет этот код?
    console.log(7 >= 7);
    • true
    • false
  3. Что выведет этот код?
    console.log(3 === "3");
    • true
    • false
  4. Что выведет этот код?
    console.log(3 == "3");
    • true
    • false
  5. Что выведет этот код?
    console.log(true && false);
    • true
    • false
  6. Что выведет этот код?
    console.log(true || false);
    • true
    • false
  7. Что выведет этот код?
    const x = 12;
    console.log(x > 10 && x < 20);
    • true
    • false
  8. Что выведет этот код?
    console.log(!(5 > 2));
    • true
    • false
  9. Что выведет этот код?
    console.log("Yes" === "yes");
    • true
    • false
  10. Что выведет этот код?
    console.log("apple" < "banana");
    • true
    • false
  11. Какое значение ложное (falsy)?
    • "0"
    • 0
    • "false"
  12. Какая запись правильно проверяет, что 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