Преобразование объектов в примитивы
Преобразование объекта в примитив вызывается автоматически многими встроенными функциями и операторами, которые ожидают примитив в качестве значения.
Существует всего 3 типа (хинта) для этого:
- "string" (для alert и других операций, которым нужна строка)
- "number" (для математических операций)
- "default" (для некоторых других операторов, обычно объекты реализуют его как "number")
Спецификация явно описывает для каждого оператора, какой ему следует использовать хинт.
Алгоритм преобразования таков:
- Сначала вызывается метод
obj[Symbol.toPrimitive](hint), если он существует, - В случае, если хинт равен "string"
- происходит попытка вызвать
obj.toString()иobj.valueOf(), смотря что есть.
- происходит попытка вызвать
- В случае, если хинт равен "number" или "default"
- происходит попытка вызвать
obj.valueOf()иobj.toString(), смотря что есть.
- происходит попытка вызвать
Все эти методы должны возвращать примитив (если определены).
На практике часто бывает достаточно реализовать только obj.toString() в качестве универсального метода для преобразований к строке, который должен возвращать удобочитаемое представление объекта для целей логирования или отладки.
🚀 Источник: https://learn.javascript.ru/object-toprimitive