Skip to content

Commit 0a2af51

Browse files
committed
update article
1 parent c03faa7 commit 0a2af51

1 file changed

Lines changed: 10 additions & 7 deletions

File tree

  • 1-js/04-object-basics/05-object-toprimitive

1-js/04-object-basics/05-object-toprimitive/article.md

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -156,13 +156,21 @@ alert(user + 500); // toString -> John500
156156
В отсутствии `Symbol.toPrimitive` и `valueOf`, `toString` обработает все случаи преобразований к примитивам.
157157

158158

159-
## Преобразование "к примитиву" и преобразование "к строке/числу"
159+
## Возвращаемые типы
160160

161161
Ещё одной важной особенностью всех методов преобразований объектов, является тот факт, что они не обязаны возвращать примитив в следствие преобразований с использованием хинта.
162162

163163
Нет чётких требований к тому, чтобы `toString()` возвращал строго строку, или к тому, чтобы метод `Symbol.toPrimitive` возвращал число для хинта равного "number".
164164

165-
**Единственное обязательное требование: методы должны возвращать примитивы.**
165+
Единственное обязательное требование: методы должны возвращать примитив, а не объект.
166+
167+
```smart header="Историческая справка"
168+
По историческим причинам, если `toString` или `valueOf` вернёт объект, то ошибки не будет, но такое значение будет проигнорировано (как если бы метода вообще не существовало).
169+
170+
Метод `Symbol.toPrimitive`, напротив, *обязан* возвращать примитив, иначе будет ошибка.
171+
```
172+
173+
## Ещё операции
166174

167175
Операция инициализировавшая преобразование получает примитив, и затем продолжает работу с ним, производя дальнейшие преобразования, если это необходимо.
168176

@@ -204,11 +212,6 @@ alert(user + 500); // toString -> John500
204212
alert(obj + 2); // 3 (Преобразование к примитиву вернуло boolean, не строка => преобразование "к числу")
205213
```
206214

207-
```smart header="Историческая справка"
208-
По историческим причинам, методам `toString` или `valueOf` *должен* возвращать примитив: если любой из них вернёт объект -- ошибки не будет, но этот объект будет проигнорирован (как если бы метода вообще не существовало).
209-
210-
Метод `Symbol.toPrimitive`, напротив, *обязан* возвращать примитив, иначе будет ошибка.
211-
```
212215

213216
## Итого
214217

0 commit comments

Comments
 (0)