Чем == отличается от === и почему '0' == 0 это true?
Запутался в равенствах. Почему строка '0' равна числу 0 через ==? И когда вообще использовать === ?
5 ответов
== сравнивает «нестрого» — перед сравнением приводит типы к общему. === сравнивает «строго» — и тип, и значение, без приведения.
Именно поэтому:
'0' == 0 // true — строка '0' приводится к числу 0
'0' === 0 // false — разные типы (string vs number)
При == движок видит строку и число и превращает строку в число: Number('0') это 0, а 0 == 0 уже true.
Правило: всегда используй ===. == оставь только для одного хитрого случая — проверки на null/undefined одновременно: x == null ловит и null, и undefined.
Используй === и не думай о приведении типов. Все странности == ('' == 0, false == [], null == undefined) идут оттуда.
Всегда ===.
Линтеры (ESLint, правило eqeqeq) специально ругаются на == именно по этой причине. Включи и забудь про проблему.
== - это оператор сравнения с приведением типов (нестрогое равенство) === - это оператор сравнения без приведения типов (строгое равенство) '0' == 0 - true потому что JavaScript преобразует строку в число перед сравнением