Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

var d = new Date(2010, 0, 1); // 1 января 2010 года, (время Московское)

d.valueOf // => 1262293200000

Теперь, разобравшись с методами

toString
и
valueOf,
можно перейти к обсуждению особенностей преобразования объектов в строки и в числа. Учтите, что существует несколько специальных случаев, когда JavaScript выполняет преобразование объектов в простые значения несколько иначе. Эти особые случаи рассматриваются в конце данного раздела.

Преобразование объектов в строку интерпретатор JavaScript выполняет в два этапа:

• Если объект имеет метод

toString,
интерпретатор вызывает его. Если он возвращает простое значение, интерпретатор преобразует значение в строку (если оно не является строкой) и возвращает результат преобразования. Обратите внимание, что правила преобразований простых значений в строку четко определены для всех типов и перечислены в табл. 3.2.

• Если объект не имеет метода

toString
или этот метод не возвращает простое значение, то интерпретатор проверяет наличие метода
valueOf.
Если этот метод определен, интерпретатор вызывает его. Если он возвращает простое значение, интерпретатор преобразует это значение в строку (если оно не является строкой) и возвращает результат преобразования.

• В противном случае интерпретатор делает вывод, что ни

toString,
ни
valueOf
не позволяют получить простое значение и возбуждает исключение TypeError.

При преобразовании объекта в число интерпретатор выполняет те же действия, но первым пытается применить метод

valueOf:

• Если объект имеет метод

valueOf,
возвращающий простое значение, интерпретатор преобразует (при необходимости) это значение в число и возвращает результат.

• Иначе, если объект имеет метод

toString,
возвращающий простое значение, интерпретатор выполняет преобразование и возвращает полученное значение.

• В противном случае возбуждается исключение ТуреError.

Описанный алгоритм преобразования объекта в число объясняет, почему пустой массив преобразуется в число 0, а массив с единственным элементом может быть преобразован в обычное число. Массивы наследуют по умолчанию метод

valueOf,
который возвращает сам объект, а не простое значение, поэтому при преобразовании массива в число интерпретатор опирается на метод
toString.
Пустые массивы преобразуются в пустую строку. А пустая строка преобразуется в число 0. Массив с единственным элементом преобразуется в ту же строку, что и единственный элемент массива. Если массив содержит единственное число, это число преобразуется в строку, а затем опять в число.

Оператор + в языке JavaScript выполняет сложение чисел и конкатенацию строк. Если какой-либо из его операндов является объектом, JavaScript преобразует объект, используя специальное преобразование объекта в простое значение вместо преобразования объекта в число, используемого другими арифметическими операторами. То же относится и к оператору равенства

==
. Если выполняется сравнение объекта с простым значением, оператор выполнит преобразование объекта с использованием правил преобразования в простое значение.

Преобразование объектов в простые значения, используемое операторами

+
и
==
, предусматривает особый подход для объектов
Date
. Класс
Date
является единственным типом данных в базовом JavaScript, который определяет осмысленные преобразования и в строку, и в число. Преобразование любого объекта, не являющегося датой, в простое значение основано на преобразовании в число (когда первым применяется метод
valueOf
), тогда как для объектов типа
Date
используется преобразование в строку (первым применяется метод
toString
). Однако преобразование выполняется не совсем так, как было описано выше: простое значение, возвращаемое методом
valueOf
или
toString,
используется непосредственно, без дополнительного преобразования в число или в строку.

Оператор

<
и другие операторы отношений выполняют преобразование объектов в простые значения подобно оператору
==
, но не выделяя объекты Date: для любого объекта сначала предпринимается попытка применить метод
valueOf
, а затем метод
toString
. Любое простое значение, полученное таким способом, используется непосредственно, без дальнейшего преобразования в число или в строку.

+, ==, !=
и операторы отношений являются единственными, выполняющими специальное преобразование строки в простое значение. Другие операторы выполняют более явные преобразования в заданный тип и не предусматривают специальной обработки объектов
Date
. Оператор
, например, преобразует свои операнды в числа. Следующий фрагмент демонстрирует поведение операторов
+, -, ==
и
>
при работе с объектами
Date
:

var now = new Date; // Создать объект Date

typeof (now +1) // => "строка": + преобразует дату в строку

typeof (now - 1) // => "число": - выполнит преобразование объекта в число

now == now.toString // => true: неявное и явное преобразование в строку

now > (now -1) // => true: > преобразует объект Date в число

3.9. Объявление переменных

Прежде чем использовать переменную в JavaScript, ее необходимо объявить. Переменные объявляются с помощью ключевого слова var следующим образом:

var і;

var sum;

Один раз использовав ключевое слово var, можно объявить несколько переменных:

var і, sum;

Объявление переменных можно совмещать с их инициализацией:

Поделиться:
Популярные книги

Законы Рода. Том 5

Мельник Андрей
5. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 5

Наследие Маозари 9

Панежин Евгений
9. Наследие Маозари
Фантастика:
попаданцы
постапокалипсис
рпг
сказочная фантастика
6.25
рейтинг книги
Наследие Маозари 9

Газлайтер. Том 16

Володин Григорий Григорьевич
16. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 16

Второгодка. Книга 4. Подавать холодным

Ромов Дмитрий
4. Второгодка
Фантастика:
героическая фантастика
альтернативная история
сказочная фантастика
5.00
рейтинг книги
Второгодка. Книга 4. Подавать холодным

Я до сих пор не царь. Книга XXVII

Дрейк Сириус
27. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я до сих пор не царь. Книга XXVII

Телохранитель Генсека. Том 1

Алмазный Петр
1. Медведев
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Телохранитель Генсека. Том 1

Двойник Короля 8

Скабер Артемий
8. Двойник Короля
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Двойник Короля 8

Гром Раскатного. Том 2

Володин Григорий Григорьевич
2. Штормовой Предел
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Гром Раскатного. Том 2

Газлайтер. Том 23

Володин Григорий Григорьевич
23. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 23

Древесный маг Орловского княжества 10

Павлов Игорь Васильевич
10. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 10

Кодекс Императора IV

Сапфир Олег
4. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Императора IV

Зауряд-врач

Дроздов Анатолий Федорович
1. Зауряд-врач
Фантастика:
альтернативная история
8.64
рейтинг книги
Зауряд-врач

Студиозус

Шмаков Алексей Семенович
3. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Студиозус

На границе империй. Том 7. Часть 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
На границе империй. Том 7. Часть 4