Ответ вслух Junior Типы и приведение обновлено

== против ===

Вопрос

Чем отличается == от === и когда == допустимо?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

=== сравнивает без приведения типов: разные типы - сразу false. == сначала приводит операнды, и алгоритм неочевиден: '' == 0, '0' == 0, но '' != '0'.

Что должно прозвучать в ответе

  • === сравнивает без приведения типов

  • == приводит типы по алгоритму абстрактного сравнения

  • null == undefined истинно, но null === undefined ложно

  • NaN не равен самому себе ни при каком сравнении

  • объекты сравниваются по ссылке в обоих случаях

  • единственный оправданный == - проверка на null/undefined разом

Что могут спросить следом

  • Почему [] == ![] истинно
  • Как сравнить два объекта по значению
  • Что делает Object.is иначе, чем ===

Разбор

=== сравнивает без приведения типов: разные типы - сразу false. == сначала приводит операнды, и алгоритм неочевиден: '' == 0, '0' == 0, но '' != '0'.

Отдельные случаи: null == undefined - истина (и это единственная пара), NaN не равен ничему, включая себя (проверять через Number.isNaN), объекты в обоих операторах сравниваются по ссылке. На практике всегда ===, кроме идиомы x == null - она разом ловит null и undefined.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме