...


  Свойство length
Свойство length возвращает индекс первой свободной (незаполненной) позиции в конце массива. Даже если некоторые позиции с меньшими индексами оказываются неиспользованными, length дает индекс первой доступной позиции после завершающего элемента. Рассмотрим следующий пример:

var myArray = new Array();
myArray[1000] = "Это единственный элемент в массиве";
alert(myArray.length);

Даже если myArray имеет единственный элемент в позиции с индексом 1000, как показывает изображенное ниже диалоговое окно, отображающее myArray. length, следующей доступной позицией после завершения массива является позиция с индексом 1001:

   Из-за этой особенности свойства length мы рекомендуем использовать элементы массива по порядку. Установка значений в не смежных ячейках ведет к появлению "дыр" в массиве между индексами с определенными значениями - массив становится "редконаселенным". Это не является проблемой с точки зрения экономии памяти, поскольку JavaScript выделяет память только для тех элементов массива, которые фактически содержат данные. Это лишь означает, что придется быть осторожным, чтобы случайно не использовать неопределенные значения в "дырах". Свойство length автоматически обновляется, когда в массив добавляются новые элементы. По этой причине length обычно используется для итераций по всем элементам массива. Следующий пример иллюстрирует итерации в массиве, а также демонстрирует проблему, которая может возникнуть при использовании массива с "дырами":

// определим переменную для результата произведения
var result = 1;
// определим массив для умножаемых значений
var myValues = new 'Array ();
// установим значения
myValues[0] = 2;
myValues[2] = 3;

// пройдем по массиву, вычисляя произведение всех значений
for (var index = 0; index < myValues.length; index++)
result = result * myValues[index];

alert("Значением result является: " + result);


получим следующий результат:
Значением result является:NaN

что-то здесь работает не так. Ожидался результат, равный 6, но сообщение утверждает, что результат вообще числом не является (NaN). Что случилось? Итерации по массиву выполнялись, но элементу myValues[1] не было присвоено значение, поэтому он так и остался неопределенным (undefined). По правилам преобразования типов в JavaScript попытка умножить значение undefined на число дает в результате NaN. Один неопределенный элемент в массиве испортил все вычисления.
   Этот пример, очевидно, умозрителен, но использование массивов с дырами требует от программиста дополнительного внимания. Мы сейчас представим "аккуратную" версию примера, дающую ожидаемый результат:

var result = 1;
var myValues = new Array();
myValues[0] = 2;
myValues[2] = 3;
for (var index = 0; index < myValues.length; index++)
{
// проверим, действителен ли элемент
if (myValues [index] != undefined)
result = result * myValues[index] ;
}
alert("Значением result является: " + result);


получим следующий результат:
Значением result является: 6

   Единственным отличием от предыдущего сценария является то, что здесь умножение размещается внутри оператора if. Оператор if проверяет действительность каждого элемента и гарантирует нужное поведение, пропуская неопределенные значения.    Свойство length можно также использовать для выполнения некоторых функций. Всем элементам с индексами, превышающими значение, установленное для length, немедленно будут присвоено значение undefined, даже если в них были определенные данные. Например, чтобы удалить все элементы массива, можно установить для свойства length значение, равное нулю:

var myArray = ["красный", "зеленый", "синий"];
myArray.length = 0;
alert("myArray="+myArray);

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

получим следующий результат:
myArray=

Установка для length значения, большего, чем индекс последнего действительного элемента, не повлияет на содержимое массива, однако при этом увеличится число свободных ячеек в массиве. Вот пример использования такого сценария:

var myArray = ["красный", 'зеленый", "синий"];
myArray.length = 20;
alert("myArray="+myArray);


получим следующий результат:
myArray=красный,зеленый,синий,,,,,,,

   He следует утруждать себя установкой значений length непосредственно, поскольку результатом расширения массива является массив с разбросанными элементами. Однако удаление значений с помощью указанного метода вполне приемлемо. Например, удаление последнего элемента массива с помощью такого подхода уже не выглядит слишком неуклюжим:

myArray.length = myArray.length - 1;

   Новые версии JavaScript предлагают лучший способ исключения последнего элемента с помощью методов, обеспечиваемых объектом Array для имитации стеков и очередей.
назад: Удаление элементов массива далее: Массивы как стеки и очереди



( )


10

?

:










@ 2008-2011 Amber

.