Массив – это тип данных, содержащий (хранящий) пронумерованные значения.Каждое пронумерованное значение называется элементом массива, а число, с ко_ торым связывается элемент, называется его индексом. Так как JavaScript – это нетипизированный язык, элемент массива может иметь любой тип, причем раз_ ные элементы одного массива могут иметь разные типы. Элементы массива могут даже содержать другие массивы, что позволяет создавать массивы массивов.
На протяжении всей книги мы часто рассматриваем объекты и массивы как от_ дельные типы данных. Это полезное и разумное упрощение – в JavaScript объек_ ты и массивы можно рассматривать как разные типы для большинства задач программирования. Однако, чтобы хорошо понять поведение объектов и масси_ вов, следует знать правду: массив – это не что иное, как объект с тонким слоем дополнительной функциональности. Это можно увидеть, определив тип массива с помощью оператора typeof – будет получена строка "object".
Легче всего создать массив можно с помощью литерала, который представляет собой простой список разделенных запятыми элементов массива в квадратных скобках. Например:
var empty = [];
// Пустой
массив
var
primes
=
[2, 3, 5, 7, 11];
//
Массив
с пятью числовыми элементами
var
misc =
[
1.1, true, "a" ];
//
3 элемента разных типов
Значения в литерале массива не обязательно должны быть константами – это могут быть любые выражения:
var base = 1024;
var table = [base, base+1, base+2, base+3];
130 Глава 7. Объекты и массивы
Литералы массивов могут содержать литералы объектов или литералы других массивов:
var b = [[1,{x:1, y:2}], [2, {x:3, y:4}]];
Во вновь созданном массиве первое значение литерала массива сохраняется в эле_ менте с индексом 0, второе значение – в элементе с индексом 1, и т. д. Если в ли_ терале значение элемента опущено, будет создан элемент с неопределенным зна_ чением:
var count = [1,,3]; // Массив из 3 элементов, средний элемент не определен. var undefs = [,,]; // Массив из 2 элементов, оба не определены.
Другой способ создания массива состоит в вызове конструктора Array(). Вызы_ вать конструктор можно тремя разными способами:
• Вызов конструктора без аргументов: var a = new Array( );
В этом случае будет создан пустой массив, эквивалентный литералу [].
• Конструктору явно указываются значения первых n элементов массива:
var a = new Array(5, 4, 3, 2, 1, "testing, testing");
В этом случае конструктор получает список аргументов. Каждый аргумент определяет значение элемента и может иметь любой тип. Нумерация элемен_ тов массива начинается с 0. Свойство length массива устанавливается равным количеству элементов, переданных конструктору.
• Вызов с единственным числовым аргументом, определяющим длину массива:
var a = new Array(10);
Эта форма позволяет создать массив с заданным количеством элементов (каж_ дый из которых имеет значение undefined) и устанавливает свойство length массива равным указанному значению. Эта форма обращения к конструкто_ ру Array() может использоваться для предварительного размещения массива, если его длина известна заранее. В этой ситуации литералы массивов не очень удобны.