Одна из самых частых проблем в JavaScript — неочевидные результаты сравнения с помощью
==. Алгоритм абстрактного сравнения (Abstract Equality Comparison) приводит типы «на лету», из-за чего код может вести себя неожиданно:
0 == false // true
'' == false // true
[0] == false // true (!)
В реальных проектах это часто превращается в баги при проверке пользовательского ввода или данных из API.
Решение — использовать строгое сравнение
===, которое сравнивает и значение, и тип:
0 === false // false
'' === false // false
[0] === false // false
Нюансы:
– Валидацию входных данных всё равно нужно делать вручную:
=== не спасёт, если вы сравниваете строку "42" и число 42.– Иногда
== может быть уместным (например, при проверке на null и undefined одновременно: value == null). Но такие кейсы стоит явно документировать, чтобы не путать коллег.– Линтеры вроде ESLint (
eqeqeq: "error") позволяют сразу исключить двусмысленное сравнение на уровне правил проекта.