Элементы массива

В листинге 1 все элементы массива относятся к строковому типу. Однако они не обязательно должны быть данными одного типа. Да это и не удивительно, ведь элементы массива — это не более чем свойства одного объекта. Именами этих свойств являются номера элементов массива. Однако, как видно из второй строки сценария в листинге 1, обращение к ним несколько отличается от обращения к остальным свойствам объектов (номер элемента массива указывается после имени массива в квадратных скобках).

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

Единственным свойством объекта Array является свойство length, содержащее длинумассива, т.е. количество элементов в нем (см. листинг 1). На самом деле это свойство содержит число, на единицу большее, чем наибольший индекс элемента в массиве. Поэтому оно равно количеству элементов массива только в том случае, если массив заполняется последовательно, начиная с элемента с индексом 0. Например, если массив а включает только элементы с номерами 5 и 10, то его свойство а.length будет равняться 11, в то время как элементов в массиве, и это очевидно, всего два.

Kaк видите, массив не обязательно должен содержать последовательный набор элементов. Более того, индексом элемента массива может быть и отрицательное число. Однако использовать такую свободу в задании элементов массива без крайней необходимости не рекомендуется. Ведь тогда теряется сама концепция массива как упорядоченного набора данных. Для "разреженных" массивов и массивов с отрицательными индексами многие методы перестают правильно работать, да и вообще теряют всякий смысл.

Следует проявлять осторожность при использовании имени массива в выражениях. Если имя массива употребляется в выражении отдельно, без индекса элемента, то интер­претатор JavaScript произведет попытку преобразовать сам объект в строку. Это значит, что в выражение будет подставлена строка, состоящая из всех элементов массива, разде­ленных запятыми. Например, попытайтесь ввести в сценарии следующие инструкции:

var a = new Array(1, 2, 3, 4)

document.write(a + 1)

В результате на экран будет выведено 1,2,3,41. Подобное контекстное преобразование в строку производится для всех объектов, но для каждого по-своему (причем это может зависеть даже от применяемого браузера). Поэтому при решении любых задач не следует использовать в выражениях сам объект, а только его свойства и методы. Как правило, че­рез них всегда доступна вся содержащаяся в объекте информация.