Массивы в JavaScript являются особенными, потому что их свойство length обла_ дает особенным поведением:
• Значение этого свойства автоматически изменяется при добавлении к масси_ ву новых элементов.
• Изменение этого свойства в программе приводит к усечению или увеличению массива.
Массивы в JavaScript являются экземплярами класса Array (instanceof Array), и для работы с ними могут использоваться методы этого класса.
Все эти характеристики являются уникальными для JavaScript_массивов, но они не главное, что определяет массив. Бывает полезно организовать работу с произ_ вольным объектом, как со своего рода массивом – через свойство length и соответ_ ствующие неотрицательные целочисленные свойства. Такие объекты, «подобные массивам», иногда используются для решения практических задач. Хотя с ними нельзя работать через методы массивов или ожидать специфического поведения свойства length, можно организовать перебор свойств объекта теми же программ_ ными конструкциями, которые используются при работе с настоящими массива_ ми. Оказывается, что значительное число алгоритмов для работы с массивами вполне пригодно для работы с объектами, подобными массивам. Пока вы не буде_ те пытаться добавлять элементы в массив или изменять свойство length, вы впол_ не сможете обрабатывать объекты, подобные массивам, как обычные массивы.
В следующем фрагменте создается обычный объект и к нему добавляются допол_ нительные свойства, которые превращают его в объект, подобный массиву, по_ сле чего производится перебор «элементов» получившегося псевдомассива.
var a = {}; // Для начала создать обычный пустой объект
// Добавить свойства, которые сделают его похожим на массив var i = 0;
while(i < 10) { a[i] = i * i; i++;
}
a.length = i;
// Теперь можно перебрать свойства объекта, как если бы это был настоящий массив var total = 0;
for(var j = 0; j < a.length; j++) total += a[j];
Объект Argument, который описывается в разделе 8.2.2, является объектом, подоб_ ным массиву. В клиентском языке JavaScript такие объекты возвращают многие методы объектной модели документа (DOM), например метод document.getEle_ mentsByTagName().