К практике
НачальныйJavaScriptсравнение===
⚖️JuniorJavaScriptсравнение=====nullNaN
Операторы сравнения
=== и ==, сравнение строк, null и undefined — все подводные камни.
JSОператоры сравнения: ===, ==, truthy/falsy
=== строгое
Тип и значение должны совпадать
1 === 1✓ true1 === "1"✗ falsenull === undefined✗ false0 === false✗ falseNaN === NaN✗ false== нестрогое
Приводит типы перед сравнением
1 == "1"✓ truecoercion0 == false✓ truenull == undefined✓ true"" == false✓ truenull == 0✗ falsespecial!Правило: всегда используй ===
== может привести к неожиданным результатам из-за неявного приведения типов
Язык примеров:
Шаг 1 из 1Практика
1
Строгое === vs нестрогое ==
Строгое равенство ===
Сравнивает и значение, и тип. Приведения типов не происходит.
javascript
1 === 1 // true
1 === "1" // false (разные типы)
0 === false // false
null === undefined // false
NaN === NaN // false (NaN ≠ NaN всегда!)
// Объекты сравниваются по ссылке:
{} === {} // false (два разных объекта в памяти)
[] === [] // false
const a = [1,2,3];
const b = a;
a === b // true (одна и та же ссылка)Нестрогое равенство ==
Пытается привести операнды к одному типу перед сравнением:
javascript
1 == "1" // true ("1" → 1)
0 == false // true (false → 0)
0 == "" // true ("" → 0)
0 == "0" // true ("0" → 0)
"" == false // true (оба → 0)
null == undefined // true (особый случай)
null == 0 // false (null не конвертируется)
null == false // falseПравило: всегда используй === и !==. Единственное допустимое исключение:
javascript
// Проверить на null ИЛИ undefined одновременно:
if (value == null) { // true когда value = null или undefined
// эквивалентно: value === null || value === undefined
}Сравнение строк
javascript
// Лексикографическое (по Unicode)
"a" < "b" // true
"B" < "a" // true (!) заглавные < строчных в Unicode
"abc" < "abd" // true (сравнение посимвольно)
"2" > "10" // true (!) "2" > "1" лексикографически
// Для правильного сравнения строк — localeCompare:
"Я".localeCompare("А") // 1 (Я после А)
["Яблоко", "Арбуз", "Банан"].sort((a, b) => a.localeCompare("ru"))JavaScript
// Сравнение с NaN
NaN === NaN // false
NaN !== NaN // true
NaN > 0 // false
NaN < 0 // false
NaN == NaN // false
// Единственный правильный способ проверить на NaN:
Number.isNaN(NaN) // true
Number.isNaN(42) // false
Number.isNaN("NaN") // false (строка — не NaN)
isNaN("NaN") // true (глобальная isNaN приводит к числу)
// Безопасная функция для работы с числами:
function safeDiv(a, b) {
if (b === 0) return null;
const result = a / b;
return Number.isFinite(result) ? result : null;
}
safeDiv(10, 2) // 5
safeDiv(10, 0) // null
safeDiv(0, 0) // nullЧто вернёт `"10" > "9"`?