Skip to main content

Преобразование объектов в примитивы

Преобразование объекта в примитив вызывается автоматически многими встроенными функциями и операторами, которые ожидают примитив в качестве значения.

Существует всего 3 типа (хинта) для этого:

  • "string" (для alert и других операций, которым нужна строка)
  • "number" (для математических операций)
  • "default" (для некоторых других операторов, обычно объекты реализуют его как "number")

Спецификация явно описывает для каждого оператора, какой ему следует использовать хинт.

Алгоритм преобразования таков:

  1. Сначала вызывается метод obj[Symbol.toPrimitive](hint), если он существует,
  2. В случае, если хинт равен "string"
    • происходит попытка вызвать obj.toString() и obj.valueOf(), смотря что есть.
  3. В случае, если хинт равен "number" или "default"
    • происходит попытка вызвать obj.valueOf() и obj.toString(), смотря что есть.

Все эти методы должны возвращать примитив (если определены).

На практике часто бывает достаточно реализовать только obj.toString() в качестве универсального метода для преобразований к строке, который должен возвращать удобочитаемое представление объекта для целей логирования или отладки.

🚀 Источник: https://learn.javascript.ru/object-toprimitive