Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ASCII и latin.docx
Скачиваний:
3
Добавлен:
08.08.2019
Размер:
190.09 Кб
Скачать

3.6. Массивы

Массив (array), как и объект, представляет собой коллекцию значений. Если каждое значение, содержащееся в объекте, имеет имя, то в массиве каждое значение имеет номер, или индекс. В JavaScript можно извлекать значения из массива, указав после имени массива индекс, заключенный в квадратные скобки. Например, если a – это имя массива, а i – неотрицательное целое число, то a[i] является элементом массива. Индексы массива начинаются с нуля, т. е. a[2] ссылается на третий элемент массива a. Массивы могут содержать любой тип данных JavaScript, в том числе ссылки на другие массивы или на объекты или функции. Например:

document.images[1].width

Этот код ссылается на свойство width объекта, хранящегося во втором элементе массива, в свою очередь хранящегося в свойстве images объекта document.Обратите внимание: описываемые здесь массивы отличаются от ассоциативных массивов (см. раздел 3.5). Здесь обсуждаются «настоящие» массивы, которые индексируются неотрицательными целыми числами. Ассоциативные массивы индексируются строками. Следует также отметить, что в JavaScript не поддерживаются многомерные массивы (хотя допускается существование массивов из массивов). И наконец, поскольку JavaScript является нетипизированным языком,элементы массива не обязательно должны иметь одинаковый тип, как в типизированных языках, подобных Java. Подробнее о массивах мы поговорим в главе 7.

3.6.1. Создание массивов

Массив может быть создан с помощью функцииконструктора Array(). Созданному массиву допустимо присваивать любое количество индексированных элементов:

var a = new Array();

a[0] = 1.2;

a[1] = "JavaScript";

a[2] = true;

a[3] = { x:1, y:3 };

Массивы могут также быть инициализированы путем передачи элементов массива конструктору Array(). Таким образом, предыдущий пример создания и инициализации массива можно записать так:

var a = new Array(1.2, "JavaScript", true, { x:1, y:3 });

Если передать конструктору Array() только одно число, оно определит длину массива. Таким образом, следующее выражение создает новый массив с 10 неопределенными элементами:

var a = new Array(10);

3.6.2. Литералы массивов

В JavaScript определяется синтаксис литералов для создания и инициализации массивов. Литерал, или инициализатор, массива – это список разделенных запятыми значений, заключенных в квадратные скобки. Значения в скобках последовательно присваиваются элементам массива с индексами, начиная с нуля. Например, программный код, создающий и инициализирующий массив из предыдущего раздела, можно записать следующим образом:

var a = [1.2, "JavaScript", true, { x:1, y:3 }];

Как и объектные литералы, литералы массивов могут быть вложенными:

var matrix = [[1,2,3], [4,5,6], [7,8,9]];

Как и в объектных литералах, элементы в литерале массива могут быть произвольными выражениями и не обязательно должны быть константами:

var base = 1024;

var table = [base, base+1, base+2, base+3];3.7. Значение null 55

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

var sparseArray = [1,,,,5];

7.5. Массивы

Массив – это тип данных, содержащий (хранящий) пронумерованные значения.

Каждое пронумерованное значение называется элементом массива, а число, с ко

торым связывается элемент, называется его индексом. Так как 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() может использоваться для предварительного размещения массива,

если его длина известна заранее. В этой ситуации литералы массивов не

очень удобны.

7.6. Чтение и запись элементов массива

Доступ к элементам массива осуществляется с помощью оператора []. Слева от

скобок должна присутствовать ссылка на массив. Внутри скобок должно нахо

диться произвольное выражение, имеющее неотрицательное целое значение. Этот

синтаксис пригоден как для чтения, так и для записи значения элемента массива.

Следовательно, все приведенные далее JavaScriptинструкции допустимы:

value = a[0];

a[1] = 3.14;

i = 2;

a[i] = 3;

a[i + 1] = "hello";

a[a[i]] = a[0];7.6. Чтение и запись элементов массива 131

В некоторых языках первый элемент массива имеет индекс 1. Однако в Java

Script (как в C, C++ и Java) первый элемент массива имеет индекс 0.

Как уже отмечалось, оператор [] может также использоваться для доступа к име

нованным свойствам объекта:

my['salary'] *= 2;

Поскольку массивы являются специализированным классом объектов, сущест

вует возможность определять нечисловые свойства объекта и обращаться к ним

посредством операторов . (точка) и [].

Обратите внимание, что индекс массива должен быть неотрицательным числом,

меньшим 232–1. Если число слишком большое, отрицательное или вещественное

(или это логическое, объектное или другое значение), JavaScript преобразует его

в строку и рассматривает результирующую строку как имя свойства объекта,

а не как индекс массива. Таким образом, следующая строка создаст новое свой

ство с именем "–1.23", а не новый элемент массива:

a[1.23] = true;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]