Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: toprimitive, valueof, tostring

В каком порядке вызываются valueOf и toString?

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

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

При приведении объекта к примитиву JavaScript сначала пытается вызвать valueOf, а если он не возвращает примитив, вызывает toString. Этот порядок применяется по умолчанию для числового контекста. Если результат всё ещё не примитив, выбрасывается ошибка. Поведение строго описано в спецификации.

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

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

Определение

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

Базовый порядок вызовов

По умолчанию (числовой контекст):

  1. Вызывается obj.valueOf()

  2. Если результат — примитив, он используется

  3. Иначе вызывается obj.toString()

  4. Если результат — примитив, он используется

  5. Иначе выбрасывается TypeError

Пример

const obj = {
  valueOf() {
    return {};
  },
  toString() {
    return '10';
  }
};

Number(obj); // 10

valueOf вернул объект, поэтому JavaScript перешёл к toString.

Контекст имеет значение

Для строкового контекста порядок может меняться:

String(obj);

В этом случае JavaScript предпочтёт toString.

Современный механизм

Если у объекта есть метод:

obj[Symbol.toPrimitive]

он вызывается раньше valueOf и toString и полностью управляет приведением.

Вывод: по умолчанию JavaScript сначала вызывает valueOf, затем toString, но порядок может зависеть от контекста и быть переопределён через Symbol.toPrimitive.

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • JavaScript

    JavaScript

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

#toprimitive

#valueof

#tostring

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