Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: abstract, equality

Почему объект не равен числу при сравнении ==?

Вопрос проверяет знание правил нестрогого сравнения и процесса приведения объекта к примитиву.

Короткий ответ

При сравнении объекта с числом оператор == пытается привести объект к примитиву. Для этого вызываются методы valueOf и toString. Если результат приведения не совпадает с числом, сравнение возвращает false. Поведение может выглядеть неожиданно, но оно строго определено спецификацией.

Длинный ответ

Когда в сравнении участвует объект, JavaScript сначала пытается превратить его в примитив.

Определение

Определение: ToPrimitive — алгоритм приведения объекта к примитивному значению перед операциями вроде ==.

Как проходит сравнение

При выражении:

obj == 1

JavaScript делает следующее:

  1. Видит, что один операнд — объект.

  2. Запускает приведение объекта к примитиву.

  3. Сравнивает получившийся примитив с числом.

Пример

const obj = { value: 1 };

obj == 1; // false

Почему:

  • obj.valueOf() → возвращает сам объект

  • obj.toString() → "[object Object]"

  • строка "[object Object]" не равна 1

Пример, где сравнение будет true

const obj = {
  valueOf() {
    return 1;
  }
};

obj == 1; // true

Почему это считается опасным

  • поведение неочевидно

  • легко получить баг в условиях

  • код сложно читать и поддерживать

Практическая рекомендация

  • избегать == при сравнении объектов

  • использовать ===

  • явно приводить типы при необходимости

Вывод: объект не равен числу при ==, потому что JavaScript сначала приводит объект к примитиву, и результат этого приведения чаще всего не совпадает с числом.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    8

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#abstract

#equality

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию