В чем разница между == и === в JS?
Основы языка
`==` — нестрогое сравнение с приведением типов, `===` — строгое сравнение без приведения. === сравнивает и значение, и тип.
=== (строгое)
Возвращает true только если типы и значения совпадают. Приведения нет.
1 === 1; // true
1 === '1'; // false — разные типы
null === undefined; // false== (нестрогое)
Перед сравнением приводит операнды к одному типу, что даёт неочевидные результаты:
1 == '1'; // true
0 == false; // true
'' == false; // true
null == undefined; // true
[] == false; // trueПочему предпочитают ===
Правила приведения == сложны и порождают баги. === предсказуем, поэтому в большинстве стайлгайдов используется по умолчанию.
Единственное частое исключение
Проверка «null или undefined» одним сравнением:
if (value == null) {
// сработает и для null, и для undefined
}Особый случай
NaN === NaN; // false — используйте Number.isNaN()Коротко для собеседования
=== сравнивает значение и тип без приведения — используйте его по умолчанию. == приводит типы и даёт неочевидные результаты; оправдан в основном для проверки value == null.