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

Операторы сравнения позволяют проверять отношения между значениями и возвращают логическое значение — true или false. В JavaScript важно понимать разницу между нестрогим и строгим сравнением, а также то, как язык приводит типы автоматически.


Нестрогое сравнение: == и !=

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

Примеры:

console.log(5 == "5");     // true — строка "5" приводится к числу 5
console.log(true == 1);    // true — true приводится к 1
console.log(false == 0);   // true — false приводится к 0
console.log("" == 0);      // true — пустая строка приводится к 0
console.log(null == undefined); // true — особое правило: null и undefined равны друг другу

Почему это проблема?

console.log("0" == false); // true — "0" → 0, false → 0 → 0 == 0
console.log([] == false);  // true — пустой массив → "" → 0 → false → 0

Такие поведения могут привести к скрытым багам, особенно при обработке пользовательского ввода или данных из API.

✅ Правило: Избегайте == и != в production-коде.


Строгое сравнение: === и !==

Операторы === (строго равно) и !== (строго не равно) не выполняют приведение типов. Сравниваются и значение, и тип.

Примеры:

console.log(5 === "5");    // false — разные типы: число и строка
console.log(true === 1);   // false — boolean и number
console.log(5 === 5);      // true — одинаковые тип и значение
console.log(null === undefined); // false — разные типы
console.log("" === 0);     // false — строка не равна числу

Рекомендация:

Всегда используйте === и !==, если вам нужно точное совпадение.

// Хорошо
if (userInput === "yes") { ... }

// Плохо
if (userInput == "yes") { ... } // Может сработать на 1, true, "1"

Операторы больше/меньше: >, <, >=, <=

Эти операторы сравнивают значения по величине. При сравнении разных типов JavaScript также применяет приведение, но по другим правилам.

Сравнение чисел:

console.log(10 > 5);   // true
console.log(3 <= 3);   // true

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

Строки сравниваются по символам, в лексикографическом порядке (как в словаре):

console.log("apple" < "banana");   // true — 'a' < 'b'
console.log("Z" < "a");            // true — в ASCII 'Z' (90) < 'a' (97)
console.log("10" < "2");           // true — потому что "1" < "2", сравнение по первому символу!

❗ Важно: "10" < "2" даёт true, хотя числово 10 > 2.
Это частая ошибка при сравнении строковых чисел.

Как правильно сравнивать числа, представленные как строки?

Приведите их к числу:

console.log(Number("10") < Number("2")); // false
// или проще:
console.log(+ "10" < + "2");             // false

Примеры неожиданного поведения и как их избегать

Пример Результат Почему? Как исправить
"" == 0 true Пустая строка → 0 Используйте ===
"0" == false true "0" → 0, false → 0 Замените на ===
"5" > 3 true "5" → 5, потом сравнение чисел Корректно, но лучше явно преобразовывать
"10" < "2" true Сравнение по символам: "1" < "2" Преобразуйте в число: + "10" < + "2"
null > 0 false null → 0, но null > 0 — false Не полагайтесь на неявное приведение