fixes, renovations
This commit is contained in:
parent
3889056599
commit
bc34b2fc9d
133 changed files with 189 additions and 10 deletions
|
@ -129,8 +129,9 @@ alert( +new Date() ); // valueOf: кол-во миллисекунд, проше
|
|||
|
||||
## Две стадии преобразования
|
||||
|
||||
Итак, объект преобразован в примитив при помощи `toString` или `valueOf`. Далее, вполне возможно,
|
||||
Если необходимо, что полученный из объекта примитив будет преобразован дальше, уже по правилам для примитивов.
|
||||
Итак, объект преобразован в примитив при помощи `toString` или `valueOf`.
|
||||
|
||||
Но на этом преобразования не обязательно заканчиваются. Вполне возможно, что в процессе вычислений этот примитив будет преобразован во что-то другое.
|
||||
|
||||
Например, рассмотрим применение к объекту операции `==`:
|
||||
|
||||
|
@ -177,22 +178,28 @@ var b = {
|
|||
}
|
||||
};
|
||||
|
||||
alert( a + b ); // "12"
|
||||
alert( a - b ); // "1" - "2" = -1
|
||||
```
|
||||
|
||||
[warn header="Исключение: `Date`"]
|
||||
Объект `Date`, по историческим причинам, является исключением.
|
||||
|
||||
Бинарный оператор плюс `+` обычно использует числовое преобразование, но в случае с `Date` -- строковое:
|
||||
Бинарный оператор плюс `+` обычно использует числовое преобразование и метод `valueOf`. Как мы уже знаем, если подходящего `valueOf` нет (а его нет у большинства объектов), то используется `toString`, так что в итоге преобразование происходит к строке. Но если есть `valueOf`, то используется `valueOf`. Выше в примере как раз `a + b` это демонстрируют.
|
||||
|
||||
У объектов `Date` есть и `valueOf` и `toString`. Но оператор `+` для `Date` использует именно `toString` (хотя должен бы `valueOf`).
|
||||
|
||||
Это и есть исключение:
|
||||
|
||||
```js
|
||||
//+ run
|
||||
// бинарный вариант, строчное преобразование
|
||||
// бинарный плюс, строчное преобразование
|
||||
alert( new Date + "" ); // "строка даты"
|
||||
|
||||
// унарный вариант, как и - * /, приводит к числу
|
||||
// унарный плюс, как и - * /, приводит к числу
|
||||
alert( +new Date ); // число миллисекунд
|
||||
```
|
||||
Других подобных исключений нет.
|
||||
[/warn]
|
||||
|
||||
[warn header="Как испугать Java-разработчика"]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue