|
3 | 3 |
|
4 | 4 | Что произойдёт, если сложить два объекта `obj1 + obj2`, вычесть один из другого `obj1 - obj2` или вывести их на экран, воспользовавшись `alert(obj)`? |
5 | 5 |
|
6 | | -Существуют специальные методы, которые производят эти преобразования. |
| 6 | +В этом случае, объекты сначала автоматически преобразуются в примитивы, а затем выполнится операция. |
7 | 7 |
|
8 | | -В главе <info:type-conversions> мы видели правила для численных, строковых и логических преобразований. Но мы обделили вниманием объекты. Теперь, поскольку мы уже знаем о методах объектов и символах, можно исправить это. |
| 8 | +В главе <info:type-conversions> мы видели правила для численных, строковых и логических преобразований. Но обделили вниманием объекты. Теперь, поскольку мы уже знаем о методах объектов и символах, можно исправить это. |
9 | 9 |
|
10 | | -Для объектов нет логических преобразований, потому что все объекты являются `true` в логическом контексте. Поэтому мы будем рассматривать только преобразования к строке и числу. |
11 | | - |
12 | | -Преобразование к числу происходит, когда мы вычитаем объекты или производим с ними математические операции. Например, Объект `Date` (рассматривался в статье <info:date>) можно вычитать, и результатом вычислений `date1 - date2` будет время между двумя датами. |
13 | | - |
14 | | -Преобразования к строке происходят, когда мы хотим вывести объекты на экран с помощью `alert(obj)` или в других схожих случаях. |
| 10 | +1. Все объекты в логическом контексте являются `true`. Существуют лишь их численные и строковые преобразования. |
| 11 | +2. Численные преобразования происходят, когда мы вычитаем объекты или применяем математические функции. Например, объекты `Date` (мы рассмотрим их в статье <info:date>) могут вычитаться и результатом `date1 - date2` будет временной отрезок между двумя датами. |
| 12 | +3. Что касается строковых преобразований -- они обычно происходят, когда мы выводим объект по типу `alert(obj)` и в подобных случаях. |
15 | 13 |
|
16 | 14 | ## Преобразование к примитивам |
17 | 15 |
|
18 | | -Когда объекты используются в ситуациях, где нужны примитивы, например, в вызове `alert` или математических операциях, происходит их преобразование к примитивным значениям, следуя алгоритму `ToPrimitive` ([спецификация](https://tc39.github.io/ecma262/#sec-toprimitive)). |
19 | | - |
20 | | -Этот алгоритм позволяет настроить преобразование, используя специальные методы объектов. |
| 16 | +Мы можем тонко настраивать строковые и численные преобразования, используя специальные методы объекта. |
21 | 17 |
|
22 | | -В зависимости от ситуации, преобразование имеет так называемый "хинт" (hint). |
| 18 | +Алгоритм преобразования, называется в [спецификации](https://tc39.github.io/ecma262/#sec-toprimitive) `ToPrimitive`. Он вызывается с "хинтом" ("hint"), который определяет тип преобразования. |
23 | 19 |
|
24 | | -Существует три варианта хинтов: |
| 20 | +Существует три варианта: |
25 | 21 |
|
26 | 22 | `"string"` |
27 | | -: Когда операция ожидает строку. Например, для объектно-строковых преобразований, таких как `alert`: |
| 23 | +: Для объектно-строковых преобразований, когда совершая операцию над объектом, мы ожидаем получить строку, например `alert`: |
28 | 24 |
|
29 | 25 | ```js |
30 | 26 | // вывод |
|
35 | 31 | ``` |
36 | 32 |
|
37 | 33 | `"number"` |
38 | | -: Когда операция ожидает число. Например, для объектно-численных преобразований, таких как математические операции: |
| 34 | +: Для объектно-численных преобразований, таких как математические операции: |
39 | 35 |
|
40 | 36 | ```js |
41 | 37 | // явное преобразование |
|
52 | 48 | `"default"` |
53 | 49 | : Происходит редко, когда оператор "не уверен", какой тип ожидать. |
54 | 50 |
|
55 | | - Например, бинарный плюс `+` может работать с обоими типами: строками (конкатенировать их) и числами (складывать). Таким образом, и те и другие будут вычисляться. Или когда происходит сравнение объектов с помощью нестрогого равенства `==` со строкой, числом или символом. |
| 51 | + Например, бинарный плюс `+` может работать с обоими типами: строками (конкатенировать их) и числами (складывать). Таким образом, и те и другие будут вычисляться. Или когда происходит сравнение объектов с помощью нестрогого равенства `==` со строкой, числом или символом, и неясно какое преобразование должно быть выполнено. |
56 | 52 |
|
57 | 53 | ```js |
58 | 54 | // бинарный плюс |
|
0 commit comments