Key — ключ
{ "key1": 99 }
Ключ, обязательно
Значение
строковый
любого типа
На рис. 4.1 показан базовый синтаксис создания нового объекта.
При создании объекта ключ записывается перед двоеточием (:),
а значение — после. Это двоеточие напоминает знак «равно», поскольку
значения, стоящие слева, присваиваются именам (ключам), стоящим
справа, что похоже на создание переменных со значениями. Все пары
«ключ-значение» должны быть разделены запятыми — в нашем примере
эти запятые стоят в конце строк. И обратите внимание, что после завер-
шающей пары «ключ-значение» ("color": "Черепаховый") запятую
ставить не нужно — следом за этой парой ставится закрывающая фигур-
ная скобка.
Ключи без кавычек
Создавая первый объект, мы писали имена ключей в кавычках, однако
это не обязательно. Следующая запись тоже является допустимым лите-
ралом объекта:
71
var cat = {
legs: 3,
name: "Гармония",
color: "Черепаховый"
};
JavaScript знает, что ключи всегда строковые, поэтому можно обхо-
диться без кавычек. В этом случае имена ключей должны соответ-
ствовать тем же правилам, что и имена переменных: например, в них
не должно быть пробелов. Но если ключ указан в кавычках, пробелы
в его имени допустимы:
var cat = {
legs: 3,
Full name —
"full name": "Гармония Филомена Уси-Пусечка Морган",
полное имя
color: "Черепаховый"
};
Помните, что, хотя ключ всегда является стро-
ковым (в кавычках он записан или без), значение,
соответствующее этому ключу, может быть любого
типа — даже переменной, в которой хранятся
данные.
Кроме того, весь объект можно записать одной
строкой, хотя читать такую программу будет, пожа-
луй, не слишком удобно:
var cat = { legs: 3, name: "Гармония", color: "Черепаховый" };
Доступ к значениям внутри объектов
Хранящиеся в объектах значения можно получить с помощью квадрат-
ных скобок — так же, как элементы массива. Единственное различие
в том, что вместо индекса (число) используется ключ (строка).
cat["name"];
"Гармония"
Точно так же, как необязательны кавычки при записи литерала объ-
екта, их можно опускать и при доступе к значениям по ключу. Однако
в этом случае код будет немного другим:
72 Часть I. Основы
cat.name;
"Гармония"
Такую запись называют
писать имя ключа в кавычках внутри квадратных скобок, мы просто ста-
вим точку, после которой пишем имя ключа, без кавычек. И, аналогично
ключам без кавычек при записи литерала, такой прием сработает, только
если ключ не содержит специальных символов — например, пробелов.
Теперь предположим, что вы хотите узнать, какие вообще ключи
есть у данного объекта. Для этого в JavaScript есть удобное средство —
команда Object.keys():
Object key —
ключ объекта
Dog — пес
var dog = { name: "Оладушек", age: 6, color: "белый",
Bark — лай
bark: "Гав тяф тяф!" };
var cat = { name: "Гармония", age: 8, color: "черепаховый" };
Object.keys(dog);
["name", "age", "color", "bark"]
Object.keys(cat);
["name", "age", "color"]
Object.keys(anyObject) возвращает массив, содержащий все ключи
объекта anyObject.
Добавление элементов объекта
Пустой объект похож на пустой массив, только вместо квадратных ско-
бок при его создании используются фигурные:
var object = {};
Добавлять элементы объекта можно так же, как элементы мас-
сива, — но используя строки вместо чисел:
var cat = {};
cat["legs"] = 3;
cat["name"] = "Гармония";
cat["color"] = "Черепаховый";
cat;
{ color: "Черепаховый", legs: 3, name: "Гармония" }
Мы начали с пустого объекта под названием cat, а затем пооче-
редно добавили к нему три пары «ключ-значение». Потом мы ввели cat;,
4. Объекты 73
и браузер отобразил содержимое объекта. Тут надо отметить, что раз-
ные браузеры могут показывать объекты по-разному. Например, Chrome
(на момент написания этих строк) выводит объект cat в консоли следу-
ющим образом:
Object {legs: 3, name: "Гармония", color: "Черепаховый"}
Chrome перечисляет ключи в таком порядке — (legs, name, color),
но другие браузеры могут выводить их в другой очередности. Дело в том,
что JavaScript хранит ключи объектов, не упорядочивая их.
В массивах элементы расположены строго один за другим: индекс 0
перед индексом 1, индекс 3 после индекса 2; однако в случае объектов
неясно, как расположить элементы друг относительно друга. Должен ли