- •4.2.1. Повторные и опущенные объявления
- •Типы данных
- •3.1.3. Литералы вещественных чисел
- •3.1.6. Специальные числовые значения
- •3.2.2. Управляющие последовательности в строковых литералах
- •3.3. Логические значения
- •3.4.1. Функциональные литералы
- •3.6. Массивы
- •7.6.1. Добавление новых элементов в массив
- •7.7.9. Методы toString() и toLocaleString()
- •7.7.10. Дополнительные методы массивов
- •11.1.2. Классы символов
- •11.1.3. Повторение
- •11.1.4. Альтернативы, группировка и ссылки
- •11.1.6. Флаги
- •1 Здесь функция alert() используется просто для отображения информации: она
- •13.2.2. Сценарии во внешних файлах
- •13.3. Обработчики событий в html
- •13.5.5. Объект Window как контекст исполнения
- •15.2. Свойства объекта Document
- •1 Модель dom может также использоваться для представления xmLдокументов,
- •15.4.2. Узлы
- •15.4.2.1. Типы узлов
- •1 Стандарт dom определяет интерфейсы, а не классы. Те, кто не знаком с термином
- •15.4.2.2. Атрибуты
- •15.5. Обход документа
- •1 Во многих сложных dhtmLэффектах используются также приемы обработки
- •16.1. Обзор css
- •1 Эрик Мейер «css – каскадные таблицы стилей. Подробное руководство», 3е из
- •16.1.1. Применение правил стиля к элементам документа
- •16.2.1. Ключ к dhtml: абсолютное позиционирование
- •16.2.3. Определение положения и размеров элемента
- •16.3.2. Работа со свойствами стилей
- •300 Пикселов:
- •17.1.1.1. Аппаратнозависимые и аппаратнонезависимые события
- •17.1.2. Обработчики событий как атрибуты
- •1 Подробное описание htmLформ, включая пример проверки правильности за
- •17.2.6.3. Интерфейс MouseEvent
- •17.5. События клавиатуры
- •17.5.1. Типы событий клавиатуры
- •17.5. События клавиатуры 441
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;