Вход/Регистрация
JavaScript. Подробное руководство, 6-е издание
вернуться

Флэнаган Дэвид

Шрифт:

• Добавление нового элемента вызывает автоматическое обновление свойства

length
.

• Уменьшение значения свойства

length
вызывает усечение массива.

• Массивы наследуют множество удобных методов от

Array.prototype
.

• Атрибут

class
массивов имеет значение «Array».

Все эти характеристики отличают массивы в языке JavaScript от других объектов. Но они не главное, что определяет массив. Часто бывает удобно организовать работу с произвольным объектом, как со своего рода массивом - через свойство

length
и соответствующие неотрицательные целочисленные свойства.

Такие объекты, «подобные массивам», иногда используются для решения практических задач, и хотя с ними нельзя работать через методы массивов или ожидать специфического поведения свойства

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

В следующем фрагменте создается обычный объект и к нему добавляются дополнительные свойства, которые превращают его в объект, подобный массиву, после чего производится перебор «элементов» получившегося псевдомассива:

var а = {}; // Для начала создать обычный пустой объект

// Добавить свойства, которые сделают его похожим на массив

var і = 0;

while(i < 10) {

a[i] = і * і;

і++;

}

a.length = і;

// Теперь можно обойти свойства объекта, как если бы он был настоящим массивом

var total = 0;

for(var j = 0; j < a.length; j++) total += a[j];

Объект

Arguments
, который описывается в разделе 8.3.2, является объектом, подобным массиву. В клиентском языке JavaScript такие объекты возвращаются многими методами объектной модели документа (DOM), такими как метод
document
.
getElementsByTagName.
Следующая функция проверяет, является ли объект подобным массиву:

// Определяет, является ли о объектом, подобным массиву. Строки и функции имеют

// числовое свойство length, но они исключаются проверкой typeof.

// В клиентском JavaScript текстовые узлы D0M имеют числовое свойство length

// и, возможно, должны быть исключены дополнительной проверкой
o.nodeType != 3.

function isArrayLike(o) {

if (о && // о не null, не undefined и т. д.

typeof о === "object" && //о - объект

isFinite(o.length) && // о.length - конечное число

о.length >= 0 && // о.length - положительное

о.length===Math.floor(o.length) && // о.length - целое

о.length < 4294967296)
// о.length < 2~32

return true; // Значит, объект о подобен массиву

else

return false; // Иначе - нет

}

В разделе 7.12 будет показано, что строки в ECMAScript 5 ведут себя подобно массивам (и некоторые броузеры обеспечивали возможность обращения к символам в строке по индексам еще до выхода ECMAScript 5). Однако проверки на подобие массивам, такие как приведенная выше, для строк обычно возвращают

false
– с ними лучше работать как со строками, чем как с массивами.

Методы массивов в языке JavaScript преднамеренно были сделаны достаточно универсальными, чтобы их можно было использовать не только с настоящими массивами, но и с объектами, подобными массивам. В ECMAScript 5 все методы массивов являются универсальными. В ECMAScript 3 универсальными также являются все методы, за исключением

toString
и
toLocaleString
. (К исключениям также относится метод
concat
: несмотря на то что его можно применять к объектам, подобным массивам, он некорректно разворачивает объекты в возвращаемый массив.) Поскольку объекты, подобные массивам, не наследуют свойства от
Array.prototype
, к ним нельзя напрямую применить методы массивов. Однако их можно вызывать косвенно, с помощью метода
Function.call:

  • Читать дальше
  • 1
  • ...
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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