You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
В отсутствии `Symbol.toPrimitive` и `valueOf`, `toString` обработает все случаи преобразований к примитивам.
157
157
158
158
159
-
## Преобразование "к примитиву" и преобразование "к строке/числу"
159
+
## Возвращаемые типы
160
160
161
161
Ещё одной важной особенностью всех методов преобразований объектов, является тот факт, что они не обязаны возвращать примитив в следствие преобразований с использованием хинта.
162
162
163
163
Нет чётких требований к тому, чтобы `toString()` возвращал строго строку, или к тому, чтобы метод `Symbol.toPrimitive` возвращал число для хинта равного "number".
164
164
165
-
**Единственное обязательное требование: методы должны возвращать примитивы.**
165
+
Единственное обязательное требование: методы должны возвращать примитив, а не объект.
166
+
167
+
```smart header="Историческая справка"
168
+
По историческим причинам, если `toString` или `valueOf` вернёт объект, то ошибки не будет, но такое значение будет проигнорировано (как если бы метода вообще не существовало).
169
+
170
+
Метод `Symbol.toPrimitive`, напротив, *обязан* возвращать примитив, иначе будет ошибка.
171
+
```
172
+
173
+
## Ещё операции
166
174
167
175
Операция инициализировавшая преобразование получает примитив, и затем продолжает работу с ним, производя дальнейшие преобразования, если это необходимо.
alert(obj + 2); // 3 (Преобразование к примитиву вернуло boolean, не строка => преобразование "к числу")
205
213
```
206
214
207
-
```smart header="Историческая справка"
208
-
По историческим причинам, методам `toString` или `valueOf` *должен* возвращать примитив: если любой из них вернёт объект -- ошибки не будет, но этот объект будет проигнорирован (как если бы метода вообще не существовало).
209
-
210
-
Метод `Symbol.toPrimitive`, напротив, *обязан* возвращать примитив, иначе будет ошибка.
0 commit comments