Выбрать главу

6.10.1. Метод toString()

Метод toString() не требует аргументов; он возвращает строку, каким-либо образом представляющую значение объекта, для которого он вызывается. Интерпретатор JavaScript вызывает этот метод объекта во всех тех случаях, когда ему требуется преобразовать объект в строку. Например, это происходит, когда используется оператор + для конкатенации строки с объектом, или при передаче объекта методу, требующему строку.

Метод toString() по умолчанию не очень информативен (однако его удобно использовать для определения класса объекта, как было показано в разделе 6.8.2). Например, следующий фрагмент просто записывает в переменную s строку "[object Object]":

var s = { x:1, у:1 }.toString( );

Этот метод по умолчанию не отображает особенно полезной информации, поэтому многие классы определяют собственные версии метода toString(). Например, когда массив преобразуется в строку, мы получаем список элементов массива, каждый из которых преобразуется в строку, а когда в строку преобразуется функция, мы получаем исходный программный код этой функции. Эти специализированные версии метода toString() описываются в справочном руководстве. Смотрите, например, описание методов Array.toString(), Date.toString() и Function.toString().

В разделе 9.6.3 описывается, как можно переопределить метод toString() для своих собственных классов.

6.10.2. Метод toLocaleString()

В дополнение к методу toString() все объекты имеют метод toLocaleString(). Назначение последнего состоит в получении локализованного строкового представления объекта. По умолчанию метод toLocaleString(), определяемый классом Object, никакой локализации не выполняет; он просто вызывает метод toString() и возвращает полученное от него значение. Классы Date и Number определяют собственные версии метода toLocaleString(), возвращающие строковые представления чисел и дат в соответствии с региональными настройками. Класс Array определяет версию метода toLocaleString(), действующую подобно методу toString() за исключением того, что он форматирует элементы массива вызовом их метода toLocaleString(), а не toString().

6.10.3. Метод toJSON()

В действительности Object.prototype не определяет метод toJSON(), но метод JS0N.stringify() (раздел 6.9) пытается отыскать и использовать метод toJSON() любого объекта, который требуется сериализовать. Если объект обладает этим методом, он вызывается и сериализации подвергается возвращаемое значение, а не исходный объект. Примером может служить метод Date.toJSON().

6.10.4. Метод valueOf()

Метод valueOf() во многом похож на метод toString(), но вызывается, когда интерпретатору JavaScript требуется преобразовать объект в значение какого-либо простого типа, отличного от строки, - обычно в число. Интерпретатор JavaScript вызывает этот метод автоматически, если объект используется в контексте значения простого типа. Метод valueOf() по умолчанию не выполняет ничего, что представляло бы интерес, но некоторые встроенные классы объектов переопределяют метод valueOf() (например, Date.valueOf()). В разделе 9.6.3 описывается, как можно переопределить метод valueOf() в собственных типах объектов.

7

Массивы

Массив - это упорядоченная коллекция значений. Значения в массиве называются элементами, и каждый элемент характеризуется числовой позицией в массиве, которая называется индексом. Массивы в языке JavaScript являются нети-пизированными: элементы массива могут иметь любой тип, причем разные элементы одного и того же массива могут иметь разные типы. Элементы массива могут даже быть объектами или другими массивами, что позволяет создавать сложные структуры данных, такие как массивы объектов и массивы массивов. Отсчет индексов массивов в языке JavaScript начинается с нуля и для них используются 32-битные целые числа: первый элемент массива имеет индекс 0, а наибольший возможный индекс имеет значение 4294967294 (232-2), т.е. максимально возможный размер массива составляет 4294967295 элементов. Массивы в JavaScript являются динамическими: они могут увеличиваться и уменьшаться в размерах по мере необходимости; нет необходимости объявлять фиксированные размеры массивов при их создании или повторно распределять память при изменении их размеров. Массивы в JavaScript могут быть разреженными: не требуется, чтобы массив содержал элементы с непрерывной последовательностью индексов - в массивах могут отсутствовать элементы с некоторыми индексами. Все массивы в JavaScript имеют свойство length. Для неразреженных массивов это свойство определяет количество элементов в массиве. Для разреженных массивов значение length больше числа всех элементов в массиве.