27 lines
2.0 KiB
Markdown
27 lines
2.0 KiB
Markdown
---
|
||
sidebar_position: 7
|
||
---
|
||
|
||
# Преобразование объектов в примитивы
|
||
|
||
Преобразование объекта в примитив вызывается автоматически многими встроенными функциями и операторами, которые ожидают примитив в качестве значения.
|
||
|
||
Существует всего 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()` в качестве универсального метода для преобразований к строке, который должен возвращать удобочитаемое представление объекта для целей логирования или отладки. |