Выразительный JavaScript | страница 37
>var descriptions = {
> work: "Пошёл на работу",
> "тронул дерево": "Дотронулся до дерева"
>};
Получается, у фигурных скобок в JavaScript два значения. Употреблённые в начале инструкции, они начинают новый блок инструкций. В любом другом месте они описывают объект. Обычно нет смысла начинать инструкцию с описания объекта, и поэтому в программах обычно нет двусмысленностей по поводу этих двух применений фигурных скобок.
Если вы попытаетесь прочесть значение несуществующего свойства, вы получите >undefined
– как в примере, когда мы первый раз попробовали прочесть свойство >wolf
.
Свойству можно назначать значение через оператор >=
. Если у него ранее было значение, оно будет заменено. Если свойство отсутствовало, оно будет создано.
Возвращаясь к нашей модели со щупальцами и переменными, мы видим, что свойства тоже похожи на них. Они хватают значения, но на эти же значения могут ссылаться другие переменные и свойства. Объекты – это осьминоги с произвольным количеством щупалец, на каждом из которых написано имя свойства.
Оператор >delete
отрезает щупальце. Это унарный оператор, применяемый к выражению доступа к свойству. Это делается редко, но вполне возможно.
>var anObject = {left: 1, right: 2};
>console.log(anObject.left);
>// → 1
>delete anObject.left;
>console.log(anObject.left);
>// → undefined
>console.log("left" in anObject);
>// → false
>console.log("right" in anObject);
>// → true
Бинарный оператор >in
принимает строку и имя объекта, и возвращает булевское значение, показывающее, есть ли у объекта свойство с таким именем. Есть разница между установкой значения свойства в >undefined
и удалением свойства. В первом случае свойство сохраняется у объекта, просто оно пустое. Во втором – свойства больше нет, и тогда >in
возвращает >false
.
Получается, что массивы – это разновидность объектов, которые специализируются на хранении последовательностей. Выражение >typeof [1, 2]
вернёт >“object”
. Их можно рассматривать как длинных плоских осьминогов, у которых все щупальца расположены ровным рядом и размечены номерами.
Поэтому журнал Жака можно представить в виде массива объектов:
>var journal = [
> {events: ["работа", "тронул дерево", "пицца", "пробежка", "телевизор"],
> squirrel: false},
> {events: ["работа", "мороженое", "цветная капуста", "лазанья", "тронул дерево", "почистил зубы"],
> squirrel: false},
> {events: ["выходной", "велик", "перерыв", "арахис", "пивасик"],
> squirrel: true},
> /* и так далее... */
>];
Изменчивость (Mutability)