← Все вопросы

Чем == отличается от === и почему '0' == 0 это true?

Задан 7 месяцев назад1.5к просмотров4 ответа
24

Запутался в равенствах. Почему строка '0' равна числу 0 через ==? И когда вообще использовать === ?

4 ответа

41
✓ Принятый ответ — помог автору

== сравнивает «нестрого» — перед сравнением приводит типы к общему. === сравнивает «строго» — и тип, и значение, без приведения.

Именно поэтому:

'0' == 0    // true  — строка '0' приводится к числу 0
'0' === 0   // false — разные типы (string vs number)

При == движок видит строку и число и превращает строку в число: Number('0') это 0, а 0 == 0 уже true.

Правило: всегда используй ===. == оставь только для одного хитрого случая — проверки на null/undefined одновременно: x == null ловит и null, и undefined.

Дарина Козлова наконец-то понял разницу 🙏 · 7 месяцев назад
16

Используй === и не думай о приведении типов. Все странности == ('' == 0, false == [], null == undefined) идут оттуда.

9

Всегда ===.

6

Линтеры (ESLint, правило eqeqeq) специально ругаются на == именно по этой причине. Включи и забудь про проблему.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект