Марейн Хавербеке - Выразительный JavaScript
- Название:Выразительный JavaScript
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:978-1593275846
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Марейн Хавербеке - Выразительный JavaScript краткое содержание
В процессе чтения вы познакомитесь с основами программирования и, в частности, языка JavaScript, а также выполните несколько небольших проектов. Один из самых интересных проектов — создание своего языка программирования.
Выразительный JavaScript - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Числа, булевские значения и строки – кирпичики, из которых строятся структуры данных. Но нельзя сделать дом из одного кирпича. Объекты позволяют нам группировать значения (в том числе и другие объекты) вместе – и строить более сложные структуры.
Написание программ, которым мы до сего момента занимались, сильно затруднял тот факт, что они работали только с простыми данными. Эта глава добавит вам в инструментарий понимание структур данных. К её концу вы будете знать достаточно для того, чтобы начать писать полезные программы.
Глава пройдётся по более-менее реалистичному примеру программирования, вводя понятия по мере необходимости. Код примеров будет строиться из функций и переменных, которые мы определяли ранее.
Белка-оборотень
Иногда, обычно между восемью и десятью часами вечера, Жак против своей воли превращается в небольшого грызуна с пушистым хвостом.
С одной стороны, Жак рад, что он не превращается в классического волка. Превращение в белку влечёт меньше проблем. Вместо того, чтобы волноваться о том, не съешь ли ты соседа (это было бы неловко), он волнуется, как бы его не съел соседский кот. После того, как он дважды просыпался на очень тонкой ветке в кроне дуба, голый и дезориентированный, он приучился запирать окна и двери в своей комнате на ночь, и класть несколько орешков на пол, чтобы чем-то занять себя.

Так решаются проблемы с котом и дубом. Но Жак всё ещё страдает от своего заболевания. Нерегулярные обращения наводят его на мысль, что они должны быть чем-то вызваны. Сначала он думал, что это происходит только в те дни, когда он прикасался к деревьям. Он перестал это делать, и даже стал избегать подходить к ним. Но проблема не исчезла.
Перейдя к более научному подходу, Жак решил вести ежедневный дневник всего, чем он занимался, записывая туда, обращался ли он в белку. Так он надеется сузить круг вещей, приводящих к трансформации.
Сперва он решил разработать структуру данных для хранения этой информации.
Наборы данных
Для работы с куском данных нам вначале нужно найти способ представлять их в памяти машины. К примеру, нам нужно запомнить коллекцию чисел:
2, 3, 5, 7, 11
Можно поиграть со строками – строки могут быть любой длины, в них можно поместить много данных, и использовать для представления этого набора “2 3 5 7 11”
. Но это неудобно. Нам нужно будет как-то вынимать оттуда числа или вставлять новые в строку.
К счастью, JavaScript предлагает тип данных специально для хранения последовательностей чисел. Он называется массивом (array), и записывается, как список значений в квадратных скобках, разделённых запятыми:
var listOfNumbers = [2, 3, 5, 7, 11];
console.log(listOfNumbers[1]);
// → 3
console.log(listOfNumbers[1 - 1]);
// → 2
Запись для получения элемента из массива тоже использует квадратные скобки. Пара скобок после выражения, содержащая внутри ещё одно выражение, найдёт в массиве, который задан первым выражением, элемент, порядковый номер которого задан вторым выражением.
Номер первого элемента – ноль, а не один. Поэтому первый элемент можно получить так: listOfNumbers[0]
. Если вы раньше не программировали, придётся привыкнуть к такой нумерации. Но она имеет давнюю традицию, и всё время, пока её последовательно соблюдают, она прекрасно работает.
Свойства
Мы видели много подозрительных выражений вроде myString.length
(получение длины строки) и Math.max
(получение максимума) в ранних примерах. Эти выражения используют свойства величин. В первом случае, мы получаем доступ к свойству length
(длина) переменной myString
. Во втором — доступ к свойству max
объекта Math
(который является набором функций и переменных, связанных с математикой).
Почти у всех переменных в JavaScript есть свойства. Исключения — null
и undefined
. Если вы попробуете получить доступ к несуществующим свойствам этих не-величин, получите ошибку:
null.length;
// → TypeError: Cannot read property 'length' of null
Два основных способа доступа к свойствам – точка и квадратные скобки. value.x
и value[x]
получают доступ к свойству value
– но не обязательно к одному и тому же. Разница в том, как интерпретируется x
. При использовании точки запись после точки должна быть именем существующей переменной, и она таким образом напрямую вызывает свойство по имени. При использовании квадратных скобок выражение в скобках вычисляется для получения имени свойства. value.x
вызывает свойство под именем “x”, а value[x]
вычисляет выражение x
и использует результат в качестве имени свойства.
Если вы знаете, что интересующее вас свойство называется “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
– это метод строки.
В следующем примере демонстрируются некоторые методы, имеющиеся у массивов:
Читать дальшеИнтервал:
Закладка: