JavaRush /Курсы /Модуль 1: Web Core /Операторы сравнения: ==>, !=, !==, >, <, >=, ...

Операторы сравнения: ==>, !=, !==, >, <, >=, <=

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

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

В программировании (и в жизни!) мы постоянно сравниваем что-то с чем-то. Например:

  • Если температура больше 30 градусов — включить кондиционер.
  • Если пользователь ввёл правильный пароль — пустить на сайт.
  • Если число меньше нуля — вывести предупреждение.

В JavaScript для таких сравнений есть специальные операторы сравнения. Они позволяют сравнить два значения и узнать, истинно ли сравнение (true) или ложно (false). Именно эти значения (true и false) и используют условные операторы (if, else), о которых мы уже говорили.

Вот самые популярные операторы сравнения в JavaScript:

Оператор Назначение Пример Результат
==
Равно (с приведением типов)
5 == '5'
true
===
Строгое равно (без приведения)
5 === '5'
false
!=
Не равно (с приведением типов)
5 != '5'
false
!==
Строго не равно (без приведения)
5 !== '5'
true
>
Больше
7 > 3
true
<
Меньше
2 < 3
true
>=
Больше или равно
5 >= 5
true
<=
Меньше или равно
3 <= 4
true

Внимание! Все операторы сравнения возвращают либо true, либо false — это значения логического типа (boolean).

2. Оператор == (равно, с приведением типов)

Оператор == сравнивает два значения и возвращает true, если они равны. Но! Перед сравнением JavaScript пытается привести оба значения к одному типу (например, строку к числу или наоборот). Это может привести к неожиданным результатам.

Примеры:

console.log(5 == 5);      // true
console.log(5 == '5');    // true (строка '5' преобразуется в число)
console.log(0 == false);  // true (0 преобразуется в false)
console.log(null == undefined); // true (специфичное поведение JS)

Аналогия

Представьте, что вы сравниваете яблоко и грушу, но перед этим оба натираете до блеска и перекрашиваете в один цвет. Вроде бы похожи — но внутри-то всё равно разные!

3. Оператор === (строгое равно, без приведения типов)

Оператор === сравнивает значения и типы данных. Если типы разные — сразу false, даже если значения "похожи".

Примеры:

console.log(5 === 5);      // true
console.log(5 === '5');    // false (число и строка — разные типы)
console.log(0 === false);  // false (число и boolean — разные типы)
console.log(null === undefined); // false (разные типы)

Почему это важно?

В большинстве случаев лучше использовать ===, чтобы избежать "магии" приведения типов и случайных совпадений. Это как проверять не только номер паспорта, но и фотографию: мало ли, вдруг кто-то одолжил чужой документ!

4. Операторы != и !== (не равно)

  • != — не равно, с приведением типов.
  • !== — строгое не равно, без приведения типов.

Примеры:

console.log(5 != '5');      // false (значения равны после приведения)
console.log(5 !== '5');     // true (разные типы)
console.log(0 != false);    // false (0 преобразуется в false)
console.log(0 !== false);   // true (число и boolean — разные типы)

Совет

Как и с ===, чаще используйте !== для большей надёжности.

5. Операторы сравнения больше/меньше: >, <, >=, <=

Эти операторы работают почти так же, как в математике. Они сравнивают значения слева и справа.

Примеры:

console.log(7 > 3);      // true
console.log(2 < 1);      // false
console.log(5 >= 5);     // true
console.log(3 <= 4);     // true

Сравнение строк

Если сравнивать строки, то они сравниваются в алфавитном порядке (по Unicode).

console.log('apple' < 'banana'); // true
console.log('abc' > 'Abc');      // true, потому что строчные буквы идут после заглавных

Сравнение разных типов

Если сравниваете число и строку, строка сначала преобразуется в число (если возможно):

console.log('10' > 5); // true ('10' → 10)
console.log('abc' > 5); // false ('abc' → NaN, а NaN — ни больше, ни меньше)

6. Практика: сравнения в условиях

Операторы сравнения чаще всего используют в условных операторах. Например:

let age = 18;

if (age >= 18) {
  console.log('Вам можно голосовать!');
} else {
  console.log('Ещё рано голосовать!');
}

Ещё пример — сравнение строк:

let password = 'qwerty';

if (password === 'qwerty') {
  console.log('Пароль верный!');
} else {
  console.log('Пароль неверный!');
}

7. Полезные нюансы

Краткая таблица: когда какой оператор использовать

Оператор Приведение типов Обычно использовать? Пример
==
Да Лучше избегать
5 == '5'
===
Нет Да
5 === 5
!=
Да Лучше избегать
5 != '5'
!==
Нет Да
5 !== '5'
>, <, >=, <=
Да (строка → число) Да
'10' > 5

Забавные (и опасные) примеры

JavaScript иногда ведёт себя... своеобразно. Вот несколько примеров, которые удивляют даже опытных программистов:

console.log(false == 0);        // true
console.log('' == 0);           // true
console.log(null == undefined); // true
console.log([] == false);       // true (!)
console.log([] == 0);           // true (!)
console.log([1] == true);       // true (!)

Почему так?
Потому что оператор == пытается привести значения к одному типу. Иногда это приводит к "магическим" совпадениям, которые сложно предсказать.

Влияние типов на сравнение: что происходит "под капотом"

Когда вы используете операторы сравнения, JavaScript иногда преобразует значения к числу, иногда к строке, иногда к boolean. Вот простая схема:

  • Если оба значения — числа, сравниваются как числа.
  • Если хотя бы одно значение — строка, а второе — число, строка преобразуется в число (если возможно).
  • Если сравниваете boolean с чем-то ещё, boolean преобразуется в число: true1, false0.
  • Если сравниваете объекты (например, массивы) с чем-то ещё, объекты пытаются преобразоваться в примитивы (строку или число), что часто приводит к странным результатам.

Как это связано с вашим приложением?

Допустим, у нас есть простое приложение — калькулятор возраста. Пользователь вводит свой возраст, а программа проверяет, совершеннолетний ли он:

let userAge = prompt('Введите ваш возраст:');
if (userAge >= 18) {
  console.log('Доступ разрешён');
} else {
  console.log('Доступ запрещён');
}

Внимание!
Значение, полученное через prompt, — это строка! При сравнении с числом JavaScript попытается преобразовать строку в число. Если пользователь введёт не число (например, "abc"), произойдёт "магия", и результат будет неожиданным ('abc' >= 18 даст false).

8. Типичные ошибки при работе с операторами сравнения

Ошибка №1: Использование == вместо ===
Многие новички (и не только) используют == по привычке, не задумываясь о приведении типов. Это может привести к багам, когда значения "кажутся" равными, но на самом деле типы разные. Например, сравнение пароля, введённого пользователем, с числовым значением даст true при неочевидных обстоятельствах.

Ошибка №2: Сравнение строк и чисел без преобразования
Если вы сравниваете строку и число, не ожидайте, что результат всегда будет логичным. Например, '10' > 5 даст true, а 'abc' > 5false. Если пользователь вводит данные, всегда приводите их к нужному типу явно.

Ошибка №3: Сравнение с null и undefined
Сравнение с этими значениями (null == undefined) возвращает true, но строгое сравнение (null === undefined) — false. Это часто становится причиной загадочных багов. Лучше всегда использовать строгое сравнение (===).

Ошибка №4: Сравнение объектов
Если вы сравниваете два массива или объекта с помощью == или ===, результат, скорее всего, будет false, даже если содержимое одинаковое. Сравниваются не значения, а ссылки на объекты.

console.log([1, 2] == [1, 2]); // false
console.log({a: 1} === {a: 1}); // false

Ошибка №5: Забыли, что операторы сравнения возвращают boolean
Помните, что результат сравнения — это всегда true или false. Не нужно сравнивать результат с true или false ещё раз:

if (a === b === true) { ... } // Ошибка!

Правильно:

if (a === b) { ... }
1
Задача
Модуль 1: Web Core, 20 уровень, 7 лекция
Недоступна
Статические методы
Статические методы
1
Задача
Модуль 1: Web Core, 20 уровень, 7 лекция
Недоступна
Фабричный метод User
Фабричный метод User
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ