← Все вопросы

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

Задан 9 месяцев назад1.6к просмотров5 ответов
24

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

5 ответов

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

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

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

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

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

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

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

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

9

Всегда ===.

6

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

0

== - это оператор сравнения с приведением типов (нестрогое равенство) === - это оператор сравнения без приведения типов (строгое равенство) '0' == 0 - true потому что JavaScript преобразует строку в число перед сравнением

Ваш ответ

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