Книга: JavaScript. Подробное руководство, 6-е издание
4.2. Инициализаторы объектов и массивов
4.2. Инициализаторы объектов и массивов
Инициализаторы объектов и массивов - это выражения, значениями которых являются вновь созданные объекты и массивы. Эти выражения-инициализаторы иногда называют «литералами объектов» и «литералами массивов». Однако, в отличие от истинных литералов, они не являются первичными выражениями, потому что включают множество подвыражений, определяющих значения свойств и элементов. Инициализаторы массивов имеют более простой синтаксис, поэтому мы рассмотрим их в первую очередь.
Инициализатор массива - это список выражений, разделенных запятыми, заключенный в квадратные скобки. Значением инициализатора массива является вновь созданный массив. Элементы этого нового массива инициализируются значениями выражений из списка:
[] // Пустой массив: отсутствие выражений в квадратных скобках
// означает отсутствие элементов
[1+2,3+4] // Массив из 2 элементов. Первый элемент - 3, второй - 7
Выражения в инициализаторе массива, определяющие значения его элементов, сами могут быть инициализаторами массивов, благодаря чему имеется возможность создавать вложенные массивы:
var matrix = [[1,2,3], [4,5,6], [7,8,9]];
Выражения в инициализаторе массива, определяющие значения его элементов, вычисляются всякий раз, когда вычисляется значение инициализатора. Это означает, что значение выражения инициализатора массива может отличаться при каждом последующем его вычислении.
В литерал массива допускается включать неопределенные элементы, для чего достаточно опустить значение между запятыми. Например, следующий массив содержит пять элементов, включая три элемента с неопределенными значениями:
var sparseArray = [1,,,,5];
После последнего выражения в инициализаторах массивов допускается указывать завершающую запятую, при этом последний элемент с неопределенным значением создаваться не будет.
Выражения-инициализаторы объектов похожи на выражения-инициализаторы массивов, но вместо квадратных скобок в них используются фигурные скобки, а каждое подвыражение предваряется именем свойства и двоеточием:
var р = { х:2.3, у:-1.2 }; // Объект с 2 свойствами
var q = {}; // Пустой объект без свойств
q.x = 2.3; q.y = -1.2; // Теперь q имеет те же свойства, что и р
Литералы объектов могут быть вложенными. Например:
var rectangle = { upperLeft: { х: 2, у: 2 },
lowerRight: { х: 4, у: 5 } };
Выражения внутри инициализаторов объектов вычисляются всякий раз, когда вычисляется значение самого инициализатора, и не обязательно должны быть константами: они могут быть произвольными выражениями JavaScript. Кроме того, имена свойств в литералах объектов могут быть строками, а не идентификаторами (это удобно, когда возникает желание дать свойствам имена, совпадающие с зарезервированными словами, которые иначе не могут использоваться в качестве идентификаторов):
var side = 1;
var square = { "upperLeft": { x: p.x, y: p.y },
'lowerRight': { x: p.x + side, y: p.y + side}};
Мы еще вернемся к инициализаторам объектов и массивов в главах 6 и 7.
- 4.1. Первичные выражения
- 4.2. Инициализаторы объектов и массивов
- 4.3. Выражения определений функций
- 4.4. Выражения обращения к свойствам
- 4.5. Выражения вызова
- 4.6. Выражения создания объектов
- 4.7. Обзор операторов
- 4.8. Арифметические выражения
- 4.9. Выражения отношений
- 4.10. Логические выражения
- 4.11. Выражения присваивания
- 4.12. Вычисление выражений
- 4.13. Прочие операторы
- Инициализаторы
- Иерархия объектов в InterBase
- Имена объектов длиной 68 символов
- Создание объектов Collection
- 8.1.4. Сравнение массивов
- 8.1.22. Чередование массивов
- 3.3. Определение объектов защиты
- 2.3.6. Задание объектов физической памяти
- Материнская плата имеет возможность организации RAID-массивов из двух SATA-дисков. Можно ли подключить к ней только один...
- Определение контекстно-связанных объектов
- 6.2. Описание объектов
- Активация хорошо известных объектов