Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание
- Название:JavaScript. Подробное руководство, 6-е издание
- Автор:
- Жанр:
- Издательство:Символ-Плюс
- Год:2012
- Город:СПб
- ISBN:978-5-93286-215-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание краткое содержание
Эта книга - одновременно и руководство программиста, и полноценный справочник по базовому языку JavaScript и клиентским прикладным интерфейсам, предоставляемым веб-броузерами.
JavaScript. Подробное руководство, 6-е издание - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
7.1. Создание массивов
Легче всего создать массив с помощью литерала, который представляет собой простой список разделенных запятыми элементов массива в квадратных скобках. Например:
var empty = []; // Пустой массив
var primes = [2, 3, 5, 7, 11]; // Массив с пятью числовыми элементами
var misc = [ 1.1, true, "а", ]; // 3 элемента разных типов + завершающая запятая
Значения в литерале массива не обязательно должны быть константами - это могут быть любые выражения:
var base = 1024;
var table = [base, base+1, base+2, base+3];
Литералы массивов могут содержать литералы объектов или литералы других массивов:
var b = [[1,{х:1, у:2}], [2, {х:3, у:4}]];
Если литерал массива содержит несколько идущих подряд запятых без значений между ними, создается разреженный массив (подробнее об этом рассказывается в разделе 7.3). Элементы, соответствующие таким пропущенным значениям, отсутствуют в массиве, но при обращении к ним возвращается значение undefined
:
var count = [1,,3]; // Элементы с индексами 0 и 2. count[1] => undefined
var undefs =[,,]; // Массив без элементов, но с длиной, равной 2
Синтаксис литералов массивов позволяет вставлять необязательную завершающую запятую, т.е. литерал [,,] соответствует массиву с двумя элементами, а не с тремя.
Другой способ создания массива состоит в вызове конструктора Аггау().
Вызвать конструктор можно тремя разными способами:
• Вызвать конструктор без аргументов:
var а = new Array();
В этом случае будет создан пустой массив, эквивалентный литералу [].
• Вызвать конструктор с единственным числовым аргументом, определяющим длину массива:
var а = new Array(10);
В этом случае будет создан пустой массив указанной длины. Такая форма вызова конструктора Array()
может использоваться для предварительного распределения памяти под массив, если заранее известно количество его элементов. Обратите внимание, что при этом в массиве не сохраняется никаких значений и даже свойства-индексы массива с именами «0», «1» и т. д. в массиве не определены.
• Явно указать в вызове конструктора значения первых двух или более элементов массива или один нечисловой элемент:
var а = new Array(5, 4, 3, 2, 1, "testing, testing");
В этом случае аргументы конструктора становятся значениями элементов нового массива. Использование литералов массивов практически всегда проще, чем подобное применение конструктора Аггау().
7.2. Чтение и запись элементов массива
Доступ к элементам массива осуществляется с помощью оператора [ ]. Слева от скобок должна присутствовать ссылка на массив. Внутри скобок должно находиться произвольное выражение, возвращающее неотрицательное целое значение. Этот синтаксис пригоден как для чтения, так и для записи значения элемента массива. Следовательно, допустимы все приведенные далее JavaScript-инструкции:
var а = ["world"]; // Создать массив с одним элементом
var value = а[0]; // Прочитать элемент 0
а[1] = 3.14; // Записать значение в элемент 1
і = 2;
а[і] = 3; // Записать значение в элемент 2
а[і + 1] = "hello"; // Записать значение в элемент 3
а[а[і]] = а[0]; // Прочитать элементы 0 и 2, записать значение в элемент 3
Напомню, что массивы являются специализированной разновидностью объектов. Квадратные скобки, используемые для доступа к элементам массива, действуют точно так же, как квадратные скобки, используемые для доступа к свойствам объекта. Интерпретатор JavaScript преобразует указанные в скобках числовые индексы в строки - индекс 1 превращается в строку "1" , - а затем использует строки как имена свойств. В преобразовании числовых индексов в строки нет ничего особенного: то же самое можно проделывать с обычными объектами:
о = {}; // Создать простой объект
о[1] = "one"; // Индексировать его целыми числами
Особенность массивов состоит в том, что при использовании имен свойств, которые являются неотрицательными целыми числами, не превышающими 2 32-2, массивы автоматически определяют значение свойства length. Например, выше был создан массив а с единственным элементом. Затем были присвоены значения его элементам с индексами 1, 2 и 3. В результате этих операций значение свойства length массива изменилось:
a.length // => 4
Следует четко отличать индексы в массиве от имен свойств объектов. Все индексы являются именами свойств, но только свойства с именами, представленными целыми числами в диапазоне от 0 до 2 32-2 являются индексами. Все массивы являются объектами, и вы можете добавлять к ним свойства с любыми именами. Однако если вы затрагиваете свойства, которые являются индексами массива, массивы реагируют на это, обновляя значение свойства length при необходимости.
Обратите внимание, что в качестве индексов массивов допускается использовать отрицательные и не целые числа. В этом случае числа преобразуются в строки, которые используются как имена свойств. Когда имя свойства не является неотрицательным целым числом, оно интерпретируется как имя обычного свойства объекта, а не как индекс массива. Кроме того, при индексировании массива строками, которые являются представлениями неотрицательных целых чисел, они интерпретируются как индексы массива, а не как свойства объекта. То же относится и к вещественным числам, не имеющим дробной части:
а[-1.23] = true; // Будет создано свойство с именем "-1.23"
а["1000"] = 0; // 1001-й элемент массива
а[1.000] // Элемент с индексом 1. То же. что и а[1]
То обстоятельство, что индексы массива являются всего лишь особой разновидностью имен свойств объекта, означает, что для массивов JavaScript отсутствует понятие ошибки «выхода за границы». Попытка получить значение любого несуществующего свойства любого объекта не рассматривается как ошибка, в этом случае просто возвращается значение undefined
. То же относится и к массивам:
а = [true, false]; // Этот массив имеет элементы с индексами 0 и 1
а[2] // => undefined. Нет элемента с таким индексом.
а[-1] // => undefined. Нет свойства с таким именем.
Поскольку массивы фактически являются объектами, они могут наследовать элементы от своих прототипов. В ECMAScript 5 массивы могут даже иметь элементы, определяющие методы чтения и записи (раздел 6.6). Если массив наследует элементы или элементы в нем имеют методы доступа, доступ к такому массиву не оптимизируется интерпретатором: время доступа к элементам такого массива будет сопоставимо с временем поиска обычных свойств объекта.
Читать дальшеИнтервал:
Закладка: