Если вы хотите полностью реализовать потенциал JavaScript, то крайне важно понять саму природу этого языка, его фундаментальные возможности и ограничения. Перед вами – обновленный вариант бестселлера, написанный гуру JavaScript Николасом Закасом. Автор показывает, как применять этот мощный инструмент для решения конкретных задач по созданию динамических пользовательских интерфейсов, которые стирают грань между настольными и веб-приложениями. Книга удачно сочетает в себе лучшие качества понятного учебного пособия, адресованного разработчикам и всеобъемлющего руководства, который всегда должен быть под рукой даже у профессионала.
Об авторе………………………………………………………………………………………………………………………. 22
О научном редакторе ………………………………………………………………………………………………….. 22
Благодарности …………………………………………………………………………… 23
Предисловие ……………………………………………………………………………… 24
Введение …………………………………………………………………………………… 26
Целевая аудитория……………………………………………………………………………………………………… 26
Темы, рассматриваемые в книге………………………………………………………………………………… 27
Структура книги………………………………………………………………………………………………………….. 27
Что нужно для эффективной работы с книгой……………………………………………………….. 30
Принятые соглашения ……………………………………………………………………………………………….. 31
Исходный код………………………………………………………………………………………………………………. 31
Ошибки…………………………………………………………………………………………………………………………. 32
Страница p2p.wrox.com ……………………………………………………………………………………………… 32
Глава 1. Что такое JavaScript? …………………………………………………….. 34
Краткая история JavaScript……………………………………………………………………………………….. 35
Реализации JavaScript………………………………………………………………………………………………… 36
ECMAScript………………………………………………………………………………………………………….. 36
Объектная модель документа ……………………………………………………………………………. 40
Объектная модель браузера……………………………………………………………………………….. 43
Версии JavaScript………………………………………………………………………………………………………… 44
Резюме ………………………………………………………………………………………………………………………….. 45
Глава 2. JavaScript в HTML ………………………………………………………….. 46
Элемент < script >…………………………………………………………………………………………………………. 46
Расположение тегов…………………………………………………………………………………………….. 49
Отложенные сценарии ……………………………………………………………………………………….. 50
Асинхронные сценарии………………………………………………………………………………………. 51
Изменения в XHTML…………………………………………………………………………………………. 51
Устаревший синтаксис………………………………………………………………………………………… 53
Встроенный код или внешние файлы? ……………………………………………………………………. 53
Режимы документа……………………………………………………………………………………………………… 54
Элемент < noscript >…………………………………………………………………………………………………….. 55
Резюме ………………………………………………………………………………………………………………………….. 56
Глава 3. Основы языка……………………………………………………………….. 57
Синтаксис …………………………………………………………………………………………………………………….. 57
Чувствительность к регистру…………………………………………………………………………….. 57
Идентификаторы…………………………………………………………………………………………………. 58
Комментарии ……………………………………………………………………………………………………….. 58
Строгий режим…………………………………………………………………………………………………….. 59
Инструкции………………………………………………………………………………………………………….. 59
Ключевые и зарезервированные слова…………………………………………………………………….. 60
Переменные………………………………………………………………………………………………………………….. 61
Типы данных………………………………………………………………………………………………………………… 63
Оператор typeof……………………………………………………………………………………………………. 63
Тип Undefined………………………………………………………………………………………………………. 64
Тип Null…………………………………………………………………………………………………………………. 65
Тип boolean …………………………………………………………………………………………………………… 66
Тип number……………………………………………………………………………………………………………. 67
Тип string………………………………………………………………………………………………………………. 74
Тип Object…………………………………………………………………………………………………………….. 77
Операторы ……………………………………………………………………………………………………………………. 78
Унарные операторы …………………………………………………………………………………………….. 78
Поразрядные операторы…………………………………………………………………………………….. 82
Логические операторы………………………………………………………………………………………… 88
Мультипликативные операторы……………………………………………………………………….. 91
Операторы сложения и вычитания…………………………………………………………………… 93
Операторы отношений……………………………………………………………………………………….. 96
Операторы эквивалентности……………………………………………………………………………… 97
Условный оператор…………………………………………………………………………………………….100
Операторы присваивания …………………………………………………………………………………100
Оператор «запятая»……………………………………………………………………………………………101
Инструкции…………………………………………………………………………………………………………………101
Инструкция if ……………………………………………………………………………………………………..101
Инструкция do-while …………………………………………………………………………………………102
Инструкция while……………………………………………………………………………………………….103
Инструкция for……………………………………………………………………………………………………103
Инструкция for-in ………………………………………………………………………………………………105
Метки инструкций……………………………………………………………………………………………..105
Инструкции break и continue ……………………………………………………………………………106
Инструкция with ………………………………………………………………………………………………..107
Инструкция switch……………………………………………………………………………………………..108
Функции………………………………………………………………………………………………………………………111
Аргументы функций…………………………………………………………………………………………..112
Никакой перегрузки…………………………………………………………………………………………..115
Резюме …………………………………………………………………………………………………………………………115
Глава 4. Переменные, область видимости и память……………………. 117
Примитивные и ссылочные значения …………………………………………………………………….117
Динамические свойства …………………………………………………………………………………….118
Копирование значений………………………………………………………………………………………118
Передача аргументов………………………………………………………………………………………….120
Проверка типа …………………………………………………………………………………………………….122
Контекст выполнения и область видимости………………………………………………………….123
Приращение цепочки областей видимости…………………………………………………….125
Отсутствие блочных областей видимости………………………………………………………126
Сборка мусора…………………………………………………………………………………………………………….129
Отслеживание и очистка …………………………………………………………………………………..130
Подсчет ссылок…………………………………………………………………………………………………..130
Производительность ………………………………………………………………………………………….132
Управление памятью………………………………………………………………………………………….132
Резюме …………………………………………………………………………………………………………………………133
Глава 5. Ссылочные типы …………………………………………………………. 135
Тип Object……………………………………………………………………………………………………………………136
Тип Array……………………………………………………………………………………………………………………..138
Идентификация массивов…………………………………………………………………………………141
Методы преобразования массивов…………………………………………………………………..142
Методы для работы с массивом как со стеком……………………………………………….144
Методы для работы с массивом как с очередью…………………………………………….145
Методы изменения порядка следования элементов……………………………………..146
Методы манипулирования элементами………………………………………………………….148
Методы поиска элементов…………………………………………………………………………………150
Методы перебора элементов …………………………………………………………………………….151
Методы редукции массивов ……………………………………………………………………………..153
Тип Date ………………………………………………………………………………………………………………………154
Унаследованные методы……………………………………………………………………………………156
Методы форматирования дат……………………………………………………………………………157
Методы для работы с компонентами даты/времени…………………………………….158
Тип RegExp………………………………………………………………………………………………………………….160
Свойства экземпляра RegExp …………………………………………………………………………..162
Методы экземпляра RegExp……………………………………………………………………………..163
Свойства конструктора RegExp……………………………………………………………………….165
Ограничения шаблонов……………………………………………………………………………………..167
Тип Function ……………………………………………………………………………………………………………….168
Никакой перегрузки (новый взгляд) ………………………………………………………………169
Объявления функций и функции-выражения ………………………………………………170
Функции как значения………………………………………………………………………………………171
Внутри функций…………………………………………………………………………………………………172
Свойства и методы функций…………………………………………………………………………….175
Оболочки примитивных типов ………………………………………………………………………………..178
Тип Boolean………………………………………………………………………………………………………….180
Тип Number………………………………………………………………………………………………………….181
Тип String …………………………………………………………………………………………………………….183
Встроенные одиночные объекты……………………………………………………………………………..193
Объект Global ……………………………………………………………………………………………………..193
Объект Math………………………………………………………………………………………………………..198
Резюме …………………………………………………………………………………………………………………………201
Глава 6. Объектно-ориентированное программирование …………… 203
Общие сведения об объектах ……………………………………………………………………………………203
Типы свойств……………………………………………………………………………………………………….204
Определение нескольких свойств ……………………………………………………………………208
Чтение атрибутов свойств…………………………………………………………………………………209
Создание объектов……………………………………………………………………………………………………..210
Паттерн Фабрика ……………………………………………………………………………………………….210
Паттерн Конструктор ………………………………………………………………………………………..211
Паттерн Прототип………………………………………………………………………………………………214
Объединение паттернов Конструктор и Прототип……………………………………….227
Паттерн Динамический прототип……………………………………………………………………228
Паттерн Паразитный конструктор…………………………………………………………………..229
Паттерн Защищенный конструктор………………………………………………………………..231
Наследование ……………………………………………………………………………………………………………..232
Цепочки прототипов ………………………………………………………………………………………….232
Кража конструктора…………………………………………………………………………………………..237
Комбинированное наследование ……………………………………………………………………..239
Прототипное наследование ………………………………………………………………………………240
Паразитное наследование………………………………………………………………………………….242
Паразитное комбинированное наследование…………………………………………………243
Резюме …………………………………………………………………………………………………………………………245
Глава 7. Функции-выражения …………………………………………………… 247
Рекурсия………………………………………………………………………………………………………………………249
Замыкания…………………………………………………………………………………………………………………..251
Замыкания и переменные …………………………………………………………………………………254
Объект this…………………………………………………………………………………………………………..255
Утечки памяти…………………………………………………………………………………………………….257
Закрытые переменные……………………………………………………………………………………………….261
Статические закрытые переменные…………………………………………………………………262
Паттерн Модуль………………………………………………………………………………………………….264
Расширенный паттерн Модуль ………………………………………………………………………..266
Резюме …………………………………………………………………………………………………………………………267
Глава 8. Объектная модель браузера ………………………………………… 269
Объект window……………………………………………………………………………………………………………269
Глобальная область видимости ………………………………………………………………………..270
Отношения окон и фреймов……………………………………………………………………………..271
Расположение окна…………………………………………………………………………………………….274
Размеры окна ………………………………………………………………………………………………………275
Открытие окон и навигация……………………………………………………………………………..277
Интервалы и тайм-ауты…………………………………………………………………………………….281
Системные диалоговые окна…………………………………………………………………………….284
Объект location……………………………………………………………………………………………………………286
Аргументы строки запроса………………………………………………………………………………..287
Работа с объектом location ………………………………………………………………………………..288
Объект navigator…………………………………………………………………………………………………………290
Обнаружение подключаемых модулей……………………………………………………………292
Регистрация обработчиков ……………………………………………………………………………….295
Объект screen………………………………………………………………………………………………………………296
Объект history …………………………………………………………………………………………………………….297
Резюме …………………………………………………………………………………………………………………………299
Глава 9. Распознавание клиента……………………………………………….. 300
Распознавание возможностей…………………………………………………………………………………..301
Надежное распознавание возможностей ………………………………………………………..302
Распознавание возможностей — не распознавание браузера ………………………304
Распознавание особенностей……………………………………………………………………………………305
Распознавание пользовательского агента ………………………………………………………………306
История………………………………………………………………………………………………………………..306
Идентификация пользовательского агента ……………………………………………………316
Полный сценарий……………………………………………………………………………………………….333
Использование сценария…………………………………………………………………………………..336
Резюме …………………………………………………………………………………………………………………………336
Глава 10. Объектная модель документа…………………………………….. 338
Иерархия узлов…………………………………………………………………………………………………………..339
Тип Node ………………………………………………………………………………………………………………340
Тип Document……………………………………………………………………………………………………..346
Тип Element…………………………………………………………………………………………………………356
Тип Text………………………………………………………………………………………………………………..368
Тип Comment………………………………………………………………………………………………………371
Тип CDATASection …………………………………………………………………………………………….372
Тип DocumentType……………………………………………………………………………………………..373
Тип DocumentFragment……………………………………………………………………………………..374
Тип Attr………………………………………………………………………………………………………………..375
Работа с DOM …………………………………………………………………………………………………………….376
Динамические сценарии……………………………………………………………………………………376
Динамические стили………………………………………………………………………………………….378
Работа с таблицами…………………………………………………………………………………………….381
Использование объектов NodeList…………………………………………………………………..383
Резюме …………………………………………………………………………………………………………………………384
Глава 11. Расширения DOM ………………………………………………………. 386
Selectors……………………………………………………………………………………………………………………….386
Метод querySelector()………………………………………………………………………………………..387
Метод querySelectorAll() …………………………………………………………………………………..387
Метод matchesSelector() ……………………………………………………………………………………388
Element Traversal………………………………………………………………………………………………………..389
HTML5 ………………………………………………………………………………………………………………………..390
Новые средства работы с классами………………………………………………………………….390
Управление фокусом………………………………………………………………………………………….393
Изменения типа HTMLDocument…………………………………………………………………..394
Свойства кодировки…………………………………………………………………………………………..395
Пользовательские атрибуты данных……………………………………………………………….395
Вставка разметки………………………………………………………………………………………………..396
Метод scrollIntoView()………………………………………………………………………………………401
Фирменные расширения…………………………………………………………………………………………..402
Режим документа ……………………………………………………………………………………………….402
Свойство children ……………………………………………………………………………………………….403
Метод contains() …………………………………………………………………………………………………404
Вставка разметки………………………………………………………………………………………………..406
Прокрутка ……………………………………………………………………………………………………………408
Резюме …………………………………………………………………………………………………………………………409
Глава 12. DOM Level 2 и 3………………………………………………………….. 410
Изменения DOM………………………………………………………………………………………………………..411
XML-пространства имен ………………………………………………………………………………….411
Другие изменения ………………………………………………………………………………………………415
Стили……………………………………………………………………………………………………………………………420
Доступ к стилям элементов ………………………………………………………………………………420
Работа с таблицами стилей……………………………………………………………………………….425
Размеры элементов…………………………………………………………………………………………….430
Обход……………………………………………………………………………………………………………………………437
Тип NodeIterator…………………………………………………………………………………………………439
Тип TreeWalker……………………………………………………………………………………………………442
Диапазоны …………………………………………………………………………………………………………………..444
Диапазоны в DOM……………………………………………………………………………………………..444
Диапазоны в Internet Explorer 8 и более ранних версий………………………………454
Резюме …………………………………………………………………………………………………………………………459
Глава 13. События ……………………………………………………………………. 461
Распространение событий ………………………………………………………………………………………..462
Всплытие событий……………………………………………………………………………………………..462
Перехват событий ………………………………………………………………………………………………463
Распространение DOM-событий …………………………………………………………………….464
Обработчики событий……………………………………………………………………………………………….465
HTML-обработчики событий…………………………………………………………………………..465
Обработчики событий DOM Level 0……………………………………………………………….467
Обработчики событий DOM Level 2……………………………………………………………….468
Обработчики событий в Internet Explorer………………………………………………………470
Кроссбраузерные обработчики событий…………………………………………………………471
Объект event……………………………………………………………………………………………………………….473
Объект event в DOM………………………………………………………………………………………….473
Объект event в Internet Explorer………………………………………………………………………477
Кроссбраузерный объект event…………………………………………………………………………479
Типы событий……………………………………………………………………………………………………………..482
События пользовательского
интерфейса…………………………………………………………………………………………………………..482
События изменения фокуса ……………………………………………………………………………..489
События мыши и колесика мыши……………………………………………………………………490
События клавиатуры и редактирования текста …………………………………………….503
События композиции ………………………………………………………………………………………..509
События изменения DOM-структуры…………………………………………………………….510
События HTML5………………………………………………………………………………………………..514
События устройств…………………………………………………………………………………………….523
События касаний и жестов ……………………………………………………………………………….528
Память и быстродействие …………………………………………………………………………………………532
Делегирование событий…………………………………………………………………………………….532
Удаление обработчиков событий……………………………………………………………………..534
Имитация событий…………………………………………………………………………………………………….536
Имитация DOM-событий…………………………………………………………………………………536
Имитация событий в Internet Explorer……………………………………………………………542
Резюме …………………………………………………………………………………………………………………………544
Глава 14. Работа с формами ……………………………………………………… 545
Общие сведения о формах ………………………………………………………………………………………..545
Отправка данных формы…………………………………………………………………………………..546
Сброс формы……………………………………………………………………………………………………….547
Поля форм …………………………………………………………………………………………………………..548
Работа с текстовыми полями……………………………………………………………………………………554
Выделение текста ……………………………………………………………………………………………….555
Фильтрация ввода………………………………………………………………………………………………559
Автоматический переход по нажатию клавиши табуляции…………………………563
API проверки ограничений в HTML5 …………………………………………………………….564
Работа со списками…………………………………………………………………………………………………….569
Выбор элементов списка……………………………………………………………………………………571
Добавление элементов в список……………………………………………………………………….572
Удаление элементов списка ………………………………………………………………………………573
Перемещение и переупорядочение элементов списка ………………………………….574
Сериализация форм…………………………………………………………………………………………………..575
Редактирование форматированного текста……………………………………………………………577
Атрибут contenteditable …………………………………………………………………………………….578
Работа с форматированным текстом……………………………………………………………….579
Выделение форматированного текста …………………………………………………………….582
Форматированный текст в формах………………………………………………………………….584
Резюме …………………………………………………………………………………………………………………………585
Глава 15. Рисование на холсте………………………………………………….. 587
Основы работы с элементом
Глава 16. HTML5……………………………………………………………………….. 631
Передача сообщений между документами……………………………………………………………..631
Встроенная поддержка перетаскивания …………………………………………………………………633
События перетаскивания ………………………………………………………………………………….633
Пользовательские целевые элементы для данных ………………………………………..634
Объект dataTransfer…………………………………………………………………………………………….635
Свойства dropEffect и effectAllowed ………………………………………………………………..637
Возможность перетаскивания ………………………………………………………………………….638
Дополнительные члены …………………………………………………………………………………….638
Элементы для медиафайлов……………………………………………………………………………………..639
Свойства ………………………………………………………………………………………………………………640
События……………………………………………………………………………………………………………….642
Пользовательские плееры…………………………………………………………………………………643
Распознавание кодеков ……………………………………………………………………………………..644
Тип Audio …………………………………………………………………………………………………………….645
Управление состоянием журнала…………………………………………………………………………….645
Резюме …………………………………………………………………………………………………………………………647
Глава 17. Обработка ошибок и отладка……………………………………… 648
Уведомления об ошибках………………………………………………………………………………………….648
Internet Explorer………………………………………………………………………………………………….649
Firefox …………………………………………………………………………………………………………………..650
Safari……………………………………………………………………………………………………………………..652
Opera …………………………………………………………………………………………………………………….652
Chrome………………………………………………………………………………………………………………….655
Обработка ошибок……………………………………………………………………………………………………..656
Инструкция try-catch…………………………………………………………………………………………657
Генерирование ошибок………………………………………………………………………………………661
Событие error………………………………………………………………………………………………………664
Стратегии обработки ошибок …………………………………………………………………………..665
Идентификация потенциальных источников ошибок………………………………….666
Различение критичных и некритичных ошибок……………………………………………671
Протоколирование ошибок на сервере……………………………………………………………672
Приемы отладки…………………………………………………………………………………………………………673
Вывод сообщений на консоль …………………………………………………………………………..673
Вывод сообщений на страницу…………………………………………………………………………676
Генерирование ошибок………………………………………………………………………………………676
Частые ошибки Internet Explorer…………………………………………………………………………….678
Операция прервана…………………………………………………………………………………………….678
Недопустимый символ………………………………………………………………………………………680
Член группы не найден ……………………………………………………………………………………..680
Неизвестная ошибка выполнения……………………………………………………………………681
Синтаксическая ошибка ……………………………………………………………………………………681
Не удается найти указанный ресурс………………………………………………………………..681
Резюме …………………………………………………………………………………………………………………………682
Глава 18. XML в JavaScript…………………………………………………………. 684
Поддержка XML DOM в браузерах ………………………………………………………………………..684
DOM Level 2 Core ………………………………………………………………………………………………684
Тип DOMParser…………………………………………………………………………………………………..685
Тип XMLSerializer………………………………………………………………………………………………687
XML в Internet Explorer 8 и более ранних версий…………………………………………687
Кроссбраузерная обработка XML……………………………………………………………………692
Поддержка XPath в браузерах………………………………………………………………………………….694
DOM Level 3 XPath ……………………………………………………………………………………………694
XPath в Internet Explorer…………………………………………………………………………………..700
Кроссбраузерная обработка XPath ………………………………………………………………….701
Поддержка XSLT в браузерах…………………………………………………………………………………..704
XSLT в Internet Explorer……………………………………………………………………………………704
Тип XSLTProcessor…………………………………………………………………………………………….709
Кроссбраузерные XSLT-преобразования ……………………………………………………….711
Резюме …………………………………………………………………………………………………………………………712
Глава 19. ECMAScript для XML …………………………………………………… 714
Типы E4X…………………………………………………………………………………………………………………….714
Тип XML………………………………………………………………………………………………………………715
Тип XMLList……………………………………………………………………………………………………….716
Тип Namespace …………………………………………………………………………………………………….717
Тип QName…………………………………………………………………………………………………………..718
Общие принципы использования……………………………………………………………………………719
Доступ к атрибутам ……………………………………………………………………………………………721
Другие типы узлов……………………………………………………………………………………………..723
Запросы………………………………………………………………………………………………………………..724
Конструирование и выполнение XML-кода…………………………………………………..726
Параметры синтаксического анализа и сериализации …………………………………729
Пространства имен …………………………………………………………………………………………….730
Другие изменения………………………………………………………………………………………………………732
Полная поддержка E4X …………………………………………………………………………………………….733
Резюме …………………………………………………………………………………………………………………………733
Глава 20. JSON …………………………………………………………………………. 735
Синтаксис ……………………………………………………………………………………………………………………736
Простые значения ………………………………………………………………………………………………736
Объекты……………………………………………………………………………………………………………….736
Массивы……………………………………………………………………………………………………………….737
Синтаксический анализ и сериализация………………………………………………………………..739
Объект JSON……………………………………………………………………………………………………….739
Параметры сериализации………………………………………………………………………………….740
Параметры синтаксического анализа………………………………………………………………744
Резюме …………………………………………………………………………………………………………………………745
Глава 21. Ajax и Comet ……………………………………………………………… 746
Объект XMLHttpRequest………………………………………………………………………………………….747
Использование объекта XHR …………………………………………………………………………..748
Заголовки HTTP ………………………………………………………………………………………………..751
Запросы GET………………………………………………………………………………………………………753
Запросы POST ……………………………………………………………………………………………………754
XMLHttpRequest LEVEL 2 ………………………………………………………………………………………755
Тип FormData ……………………………………………………………………………………………………..755
Тайм-ауты…………………………………………………………………………………………………………….756
Метод overrideMimeType() ……………………………………………………………………………….757
События хода обмена данными………………………………………………………………………………..758
Событие load ……………………………………………………………………………………………………….758
Событие progress…………………………………………………………………………………………………759
Обмен ресурсами с запросом происхождения……………………………………………………….760
CORS в Internet Explorer…………………………………………………………………………………..761
CORS в других браузерах………………………………………………………………………………….763
Предварительные запросы………………………………………………………………………………..763
Запросы с учетными данными………………………………………………………………………….764
Кроссбраузерный CORS……………………………………………………………………………………765
Альтернативные методики кроссдоменного взаимодействия……………………………..766
Проверка связи с помощью изображения ………………………………………………………766
JSONP…………………………………………………………………………………………………………………..767
Comet……………………………………………………………………………………………………………………768
События, посылаемые сервером………………………………………………………………………771
Веб-сокеты…………………………………………………………………………………………………………..773
SSE или веб-сокеты?………………………………………………………………………………………….776
Безопасность……………………………………………………………………………………………………………….776
Резюме …………………………………………………………………………………………………………………………777
Глава 22. Более сложные приемы …………………………………………….. 779
Расширенное применение функций………………………………………………………………………..779
Безопасное распознавание типов …………………………………………………………………….779
Безопасные для областей видимости конструкторы…………………………………….781
Отложенная загрузка функций………………………………………………………………………..784
Связывание функций…………………………………………………………………………………………787
Каррирование функций …………………………………………………………………………………….789
Защищенные от изменений объекты ………………………………………………………………………792
Нерасширяемые объекты ………………………………………………………………………………….793
Запечатанные объекты ………………………………………………………………………………………794
Замороженные объекты…………………………………………………………………………………….794
Расширенные возможности работы с таймерами………………………………………………….795
Повторяющиеся таймеры………………………………………………………………………………….798
Управление процессами…………………………………………………………………………………….800
Регулирование функций……………………………………………………………………………………802
Пользовательские события……………………………………………………………………………………….805
Перетаскивание ………………………………………………………………………………………………………….808
Исправленное перетаскивание…………………………………………………………………………811
Добавление пользовательских событий………………………………………………………….813
Резюме …………………………………………………………………………………………………………………………815
Глава 23. Автономный режим и клиентское хранилище …………….. 817
Распознавание автономного режима ………………………………………………………………………818
Кэш приложений………………………………………………………………………………………………………..819
Хранилище данных ……………………………………………………………………………………………………821
Cookie-файлы ……………………………………………………………………………………………………..821
Пользовательские данные в Internet Explorer……………………………………………….832
Веб-хранилище……………………………………………………………………………………………………833
IndexedDB……………………………………………………………………………………………………………840
Резюме …………………………………………………………………………………………………………………………854
Глава 24. Наилучшие методики…………………………………………………. 856
Удобство сопровождения кода …………………………………………………………………………………856
Какой код удобно сопровождать? ……………………………………………………………………857
Конвенции кодирования……………………………………………………………………………………857
Слабая связанность ……………………………………………………………………………………………861
Принципы программирования…………………………………………………………………………865
Быстродействие………………………………………………………………………………………………………….871
Область видимости…………………………………………………………………………………………….871
Выбор оптимального подхода…………………………………………………………………………..873
Сокращение количества инструкций………………………………………………………………879
Оптимизация взаимодействия с DOM……………………………………………………………882
Развертывание ……………………………………………………………………………………………………………885
Процесс сборки …………………………………………………………………………………………………..885
Проверка кода……………………………………………………………………………………………………..887
Сжатие………………………………………………………………………………………………………………….889
Резюме …………………………………………………………………………………………………………………………892
Глава 25. Перспективные API……………………………………………………. 894
requestAnimationFrame()…………………………………………………………………………………………..894
Ранние способы создания анимаций……………………………………………………………….895
Проблемы с интервалами………………………………………………………………………………….895
mozRequestAnimationFrame………………………………………………………………………………896
webkitRequestAnimationFrame и msRequestAnimationFrame………………………897
Page Visibility API………………………………………………………………………………………………………899
Geolocation API…………………………………………………………………………………………………………..901
File API ………………………………………………………………………………………………………………………..904
Тип FileReader…………………………………………………………………………………………………….904
Частичное чтение ……………………………………………………………………………………………….907
URL-адреса объектов…………………………………………………………………………………………908
Чтение файлов и перетаскивание…………………………………………………………………….909
Отправка файлов с помощью объекта XHR…………………………………………………..910
Web Timing API ………………………………………………………………………………………………………….911
Рабочие веб-потоки……………………………………………………………………………………………………913
Использование рабочего веб-потока ……………………………………………………………….913
Глобальная область видимости рабочего веб-потока ……………………………………915
Подключение других сценариев ………………………………………………………………………916
Будущее рабочих веб-потоков………………………………………………………………………….917
Резюме …………………………………………………………………………………………………………………………917
Приложение А. ECMAScript Harmony………………………………………….. 919
Общие изменения ………………………………………………………………………………………………………919
Константы……………………………………………………………………………………………………………920
Блочная и другие области видимости……………………………………………………………..920
Функции………………………………………………………………………………………………………………………921
Прочие и распределенные аргументы……………………………………………………………..922
Предлагаемые по умолчанию значения аргументов……………………………………..922
Генераторы…………………………………………………………………………………………………………..923
Массивы и другие структуры …………………………………………………………………………………..924
Итераторы……………………………………………………………………………………………………………924
Абстракции массивов…………………………………………………………………………………………925
Присваивание с деструктуризацией………………………………………………………………..926
Новые типы объектов………………………………………………………………………………………………..928
Прокси-объекты………………………………………………………………………………………………….928
Функции-прокси………………………………………………………………………………………………..931
Типы Map и Set…………………………………………………………………………………………………..931
Тип WeakMap………………………………………………………………………………………………………932
Тип StructType…………………………………………………………………………………………………….932
Тип ArrayType……………………………………………………………………………………………………..934
Классы………………………………………………………………………………………………………………………….934
Закрытые члены………………………………………………………………………………………………….935
Методы чтения и записи свойств …………………………………………………………………….936
Наследование………………………………………………………………………………………………………936
Модули ………………………………………………………………………………………………………………………..937
Внешние модули…………………………………………………………………………………………………938
Приложение Б. Строгий режим …………………………………………………. 940
Включение строгого режима…………………………………………………………………………………….940
Переменные…………………………………………………………………………………………………………………941
Объекты……………………………………………………………………………………………………………………….941
Функции………………………………………………………………………………………………………………………942
Функция eval() …………………………………………………………………………………………………………..944
Идентификаторы eval и arguments………………………………………………………………………….944
Преобразование значения this………………………………………………………………………………….945
Другие изменения………………………………………………………………………………………………………945
Приложение В. JavaScript-библиотеки ………………………………………. 947
Библиотеки общего назначения ………………………………………………………………………………947
YUI ……………………………………………………………………………………………………………………….947
Prototype………………………………………………………………………………………………………………948
Dojo Toolkit………………………………………………………………………………………………………….948
MooTools………………………………………………………………………………………………………………948
jQuery……………………………………………………………………………………………………………………949
MochiKit………………………………………………………………………………………………………………949
Underscore.js………………………………………………………………………………………………………..949
Библиотеки для интернет-приложений………………………………………………………………….949
Backbone.js…………………………………………………………………………………………………………..950
Rico……………………………………………………………………………………………………………………….950
qooxdoo…………………………………………………………………………………………………………………950
Библиотеки для анимации и эффектов…………………………………………………………………..950
script.aculo.us……………………………………………………………………………………………………….951
moo.fx ……………………………………………………………………………………………………………………951
Lightbox………………………………………………………………………………………………………………..951
Библиотеки для криптографии………………………………………………………………………………..951
JavaScript MD5……………………………………………………………………………………………………952
JavaScrypt…………………………………………………………………………………………………………….952
Приложение Г. JavaScript-инструменты …………………………………….. 953
Средства проверки кода…………………………………………………………………………………………….953
JSLint……………………………………………………………………………………………………………………953
JSHint…………………………………………………………………………………………………………………..954
JavaScript Lint……………………………………………………………………………………………………..954
Средства сокращения объема кода ………………………………………………………………………….954
JSMin ……………………………………………………………………………………………………………………954
Dojo ShrinkSafe……………………………………………………………………………………………………955
YUI Compressor…………………………………………………………………………………………………..955
Средства модульного тестирования………………………………………………………………………..955
JsUnit……………………………………………………………………………………………………………………955
YUI Test ……………………………………………………………………………………………………………….956
Dojo Object Harness (DOH) ……………………………………………………………………………..956
qUnit …………………………………………………………………………………………………………………….956
Генераторы документации ………………………………………………………………………………………..956
JsDoc Toolkit………………………………………………………………………………………………………..957
YUI Doc ……………………………………………………………………………………………………………….957
AjaxDoc ………………………………………………………………………………………………………………..957
Среды безопасного выполнения кода……………………………………………………………………..958
ADsafe…………………………………………………………………………………………………………………..958
Caja ……………………………………………………………………………………………………………………….958