Если вы знаете, что интересующее вас свойство называется “length”, вы пишете value.length
. Если вы хотите извлечь имя свойства из переменной i
, вы пишете value[i]
. А поскольку свойство может иметь любое имя, для доступа к свойству по имени “2” или “Jon Doe” вам придётся использовать квадратные скобки: value[2]
или value["John Doe"]
. Это необходимо даже когда вы знаете точное имя свойства, потому что ни “2”, ни «John Doe» не являются допустимыми именами переменных, поэтому к ним нельзя обратиться при помощи записи через точку.
Элементы массива хранятся в свойствах. Так как имена этих свойств – числа, и нам часто приходится получать их имена из значений переменных, нужно использовать квадратные скобки для доступа к ним. Свойство length
массива говорит о том, сколько в нём элементов. Имя этого свойства – допустимое имя переменной, и мы его знаем заранее, поэтому обычно мы пишем array.length
, потому, что это проще, чем писать array["length"]
.
Методы
Объекты string
и array
содержат, в дополнение к свойству length
, несколько свойств, ссылающихся на функции.
var doh = "Дык";
console.log(typeof doh.toUpperCase);
// → function
console.log(doh.toUpperCase());
// → ДЫК
У каждой строки есть свойство toUpperCase
. При вызове оно возвращает копию строки, в которой все буквы заменены на прописные. Есть также и toLowerCase
– можете догадаться, что оно делает.
Что интересно, хотя вызов toUpperCase
не передаёт никаких аргументов, функция каким-то образом получает доступ к строчке “Дык”
, свойство которой мы вызывали. Как это работает, описано в главе 6.
Свойства, содержащие функции, обычно называют методами той переменной, которой они принадлежат. То есть, toUpperCase
– это метод строки.
В следующем примере демонстрируются некоторые методы, имеющиеся у массивов:
var mack = [];
mack.push("Трест,");
mack.push("который", "лопнул");
console.log(mack);
// → ["Трест,", "который", "лопнул"]
console.log(mack.join(" "));
// → Трест, который лопнул
console.log(mack.pop());
// → лопнул
console.log(mack);
// → ["Трест,", "который"]
Метод push
используется для добавления значений в конец массива. pop
делает обратное: удаляет значение из конца массива и возвращает его. Массив строк можно сплющить в одну строку при помощи метода join
. В качестве аргумента join
передают строку, которая будет вставлена между элементами массива.
Объекты
Вернёмся к нашей белке. Набор журнальных записей можно представить в виде массива. Но записи не состоят только лишь из номеров или строк – каждая должна хранить список того, что сделал наш герой, и булевское значение, показывающее, превратился ли Жак в белку. В идеале нам бы хотелось группировать каждую из записей в какую-то одну переменную, и потом добавлять их в массив.
Переменные типа object (объект) – коллекции произвольных свойств, и мы можем добавлять и удалять свойства объекта по желанию. Один из способов создать объект – использовать фигурные скобки:
var day1 = {
squirreclass="underline" false,
events: ["работа", "тронул дерево", "пицца", "пробежка", "телевизор"]
};
console.log(day1.squirrel);
// → false
console.log(day1.wolf);
// → undefined
day1.wolf = false;
console.log(day1.wolf);
// → false
В скобках мы можем задать список свойств, разделённых запятыми. Записывается каждое свойство как имя, после которого идёт двоеточие, затем идёт выражение, которое и является значением свойства. Пробелы и переносы строк не учитываются. Разбивая запись свойств объекта на несколько строк, вы улучшаете читаемость кода. Если имя свойства не является допустимым именем переменной, его нужно заключать в кавычки:
var descriptions = {
work: "Пошёл на работу",
"тронул дерево": "Дотронулся до дерева"
};
Получается, у фигурных скобок в JavaScript два значения. Употреблённые в начале инструкции, они начинают новый блок инструкций. В любом другом месте они описывают объект. Обычно нет смысла начинать инструкцию с описания объекта, и поэтому в программах обычно нет двусмысленностей по поводу этих двух применений фигурных скобок.