Чтение и запись элементов массива
Доступ к элементам массива осуществляется с помощью оператора []. Слева от скобок должна присутствовать ссылка на массив. Внутри скобок должно находиться произвольное выражение, имеющее неотрицательное целое значение. Этот синтаксис пригоден как для чтения, так и для записи значения элемента массива.
Следовательно, все приведенные далее JavaScript-инструкции допустимы:
value = a[0];
a[1] = 3.14;
i = 2;
a[i] = 3;
a[i + 1] = "hello";
a[a[i]] = a[0];
Обратите внимание, что индекс массива должен быть неотрицательным числом, меньшим 232–1. Если число слишком большое, отрицательное или вещественное (или это логическое, объектное или другое значение), JavaScript преобразует его в строку и рассматривает результирующую строку как имя свойства объекта, а не как индекс массива. Таким образом, следующая строка создаст новое свойство с именем "–1.23", а не новый элемент массива:
a[_1.23] = true;
Добавление новых элементов в массив
В таких языках, как C и Java, массив имеет фиксированное число элементов, которое должно быть задано при создании массива. Это не относится к JavaScript – массив в JavaScript может иметь любое количество элементов, и это количество можно в любой момент изменить.
Чтобы добавить новый элемент в массив, достаточно присвоить ему значение:
a[10] = 10;
Массивы в JavaScript могут быть разреженными. Это значит, что индексы массива не обязательно принадлежат непрерывному диапазону чисел; реализация JavaScript может выделять память только для тех элементов массива, которые фактически в нем хранятся. Поэтому в результате выполнения следующего фрагмента интерпретатор JavaScript скорее всего выделит память только для элементов массива с индексами 0 и 10000, но не выделит ее для 9999 элементов, находящихся между ними:
a[0] = 1;
a[10000] = "это элемент 10,000";
Длина массива
Все массивы, как созданные с помощью конструктора Array(), так и определенные с помощью литерала массива, имеют специальное свойство length, устанавливающее количество элементов в массиве. Поскольку массивы могут иметь неопределенные элементы, более точная формулировка звучит так: свойство length всегда на единицу больше, чем самый большой номер элемента массива. В отличие от обычных свойств объектов, свойство length массива автоматически обновляется, оставаясь корректным при добавлении новых элементов в массив. Это обстоятельство иллюстрирует следующий фрагмент:
var a = new Array();// a.length == 0 (ни один элемент не определен)
a = new Array(10);// a.length == 10 (определены пустые элементы 0–9)
a = new Array(1,2,3);// a.length == 3 (определены элементы 0–2)
a = [4, 5];// a.length == 2 (определены элементы 0 и 1)
a[5] = _1;// a.length == 6 (определены элементы 0, 1 и 5)
a[49] = 0; // a.length == 50 (определены элементы 0, 1, 5 и 49)
Помните, что индексы массива должны быть меньше 232–1, т. е. максимально возможное значение свойства length равно 232–1.
Наиболее часто свойство length используется для перебора элементов массива в цикле:
var fruits = ["манго", "банан", "вишня", "персик"];
for(var i = 0; i < fruits.length; i++)
alert(fruits[i]);
Конечно, в этом примере предполагается, что элементы массива расположены непрерывно и начинаются с элемента 0. Если это не так, перед обращением к каждому элементу массива нужно проверять, определен ли он:
for(var i = 0; i < fruits.length; i++)
if (fruits[i] != undefined) alert(fruits[i]);
Аналогичный подход может использоваться для инициализации элементов массива, созданного вызовом конструктора Array():
var lookup_table = new Array(1024);
for(var i = 0; i < lookup_table.length; i++)
lookup_table[i] = i * 512;
Свойство length массива доступно как для чтения, так и для записи. Если установить свойство length в значение, меньшее текущего, массив укорачивается до новой длины; любые элементы, не попадающие в новый диапазон индексов, отбрасываются, и их значения теряются.
Если сделать свойство length большим, чем его текущее значение, в конец массива добавляются новые неопределенные элементы, увеличивая массив до нового размера.
Обратите внимание: хотя объектам могут быть присвоены элементы массива, объекты не имеют свойства length. Это свойство и его специальное поведение – наиболее важная особенность, свойственная массивам. Другие особенности, отличающие массивы от объектов, – это различные методы, определяемые классом Array.
Дата добавления: 2016-01-09; просмотров: 679;