Получить доступ

Чем == отличается от === в JavaScript?

JuniorОсновы JavaScript
Ещё спрашивают так:
  • Что такое приведение типов в JavaScript?
  • Почему NaN !== NaN?
Коротко

=== — строгое сравнение: типы должны совпадать, без преобразований. == — нестрогое: перед сравнением приводит типы по запутанным правилам ("1" == 1, 0 == "", null == undefined — всё true). Используют ===; единственная распространённая идиома с == — x == null (null или undefined).

  • Объекты сравниваются по ссылке — {} === {} это false
  • NaN не равен ничему, даже себе — Number.isNaN
  • Object.is отличает +0 от −0 и считает NaN равным NaN

А ещё Линтеры (eqeqeq) запрещают == в проекте

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Примеры приведения при ==:

"1" == 1          // true  — строка в число
0 == ""           // true  — "" в 0
0 == "0"          // true
"" == "0"         // false — сравнение строк, транзитивности нет!
false == "0"      // true
null == undefined // true
null == 0         // false
[] == false       // true  — [] → "" → 0

Правила (Abstract Equality) зависят от пары типов: булево приводится к числу, строка к числу, объект к примитиву через valueOf/toString. Отношение даже не транзитивно — поэтому == избегают.

NaN. По стандарту IEEE 754 NaN не равен ничему. Проверка — Number.isNaN(x) (глобальный isNaN сначала приводит к числу: isNaN("abc") — true).

Объекты сравниваются по ссылке. Глубокое сравнение — вручную или библиотекой (lodash isEqual).

Что хотят услышать

  • Строгое и нестрогое сравнение.
  • Примеры приведения.
  • NaN и сравнение объектов.

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем