== против ===
Вопрос
Чем отличается == от === и когда == допустимо?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
=== сравнивает без приведения типов
== приводит типы по алгоритму абстрактного сравнения
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 ошибок.
Предыдущий вопрос
Сложение числа и строки слева направо
Следующий вопрос
Как надёжно определить тип значения