Оглавление
Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Задача . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
О книге . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Типографские соглашения . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Использование программного кода примеров . . . . . . . . . . . . . 15
От издательства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Глава 1. Типы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Хоть типом назови его, хоть нет… . . . . . . . . . . . . . . . . . . . . . . 18
Встроенные типы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Значения как типы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
undefined и необъявленные переменные . . . . . . . . . . . . . . 23
typeof для необъявленных переменных . . . . . . . . . . . . . . . 24
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Глава 2. Значения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Массивы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Подобие массивов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Строки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Числа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Синтаксис работы с числами . . . . . . . . . . . . . . . . . . . . . . . 37
Малые дробные значения . . . . . . . . . . . . . . . . . . . . . . . . . 42
Безопасные целочисленные диапазоны . . . . . . . . . . . . . . . 44
6 Оглавление
Проверка целых чисел . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
32-разрядные целые числа (со знаком) . . . . . . . . . . . . . . . 46
Специальные значения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Пустые значения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Undefined . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Специальные числа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Специальное равенство . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Значения и ссылки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Глава 3. Встроенные объекты (natives) . . . . . . . . . . . . . 66
Внутреннее свойство [[Class]] . . . . . . . . . . . . . . . . . . . . . . . . . 68
Упаковка..........................................69
Ловушки при работе с объектными обертками . . . . . . . . . . 70
Распаковка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Встроенные объекты как конструкторы . . . . . . . . . . . . . . . . . . 72
Array(..) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Object(..), Function(..) и RegExp(..) . . . . . . . . . . . . . . . . . . . 77
Date(..) и Error(..) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Symbol(..).......................................81
Встроенные прототипы . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Глава 4. Преобразование типов . . . . . . . . . . . . . . . . . . . 87
Преобразование значений . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Абстрактные операции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
ToString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
ToNumber.......................................97
ToBoolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Явное преобразование типов . . . . . . . . . . . . . . . . . . . . . . . . 104
Явные преобразования: String <--> Number . . . . . . . . . . . 105
Оглавление 7
Явные преобразования: разбор числовых строк . . . . . . . . 115
Явные преобразования: * --> Boolean . . . . . . . . . . . . . . . 120
Неявное преобразование . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Неявное упрощение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Неявные преобразования: String <--> Number . . . . . . . . . 125
Неявные преобразования: Boolean --> Number . . . . . . . . . 130
Неявные преобразования: * --> Boolean...............132
Операторы || и && . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Преобразование символических имен . . . . . . . . . . . . . . . 139
Равенство строгое и нестрогое . . . . . . . . . . . . . . . . . . . . . . . 140
Быстродействие проверки равенства . . . . . . . . . . . . . . . . 141
Абстрактная проверка равенства . . . . . . . . . . . . . . . . . . . 142
Особые случаи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Абстрактное относительное сравнение . . . . . . . . . . . . . . . . . 162
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Глава 5. Грамматика . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Команды и выражения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Завершающие значения команд . . . . . . . . . . . . . . . . . . . . 168
Побочные эффекты выражений . . . . . . . . . . . . . . . . . . . . 171
Правила контекста . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Приоритет операторов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Ускоренная обработка . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Плотное связывание . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Ассоциативность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Неоднозначности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Автоматические точки с запятой . . . . . . . . . . . . . . . . . . . . . . 198
Исправление ошибок . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Ошибки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Преждевременное использование переменных . . . . . . . . . 204
Аргументы функций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
8 Оглавление
try..finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Приложение А. JavaScript в разных средах . . . . . . . . 218
Дополнение B (ECMAScript) . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Web ECMAScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Управляющие объекты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Глобальные переменные DOM . . . . . . . . . . . . . . . . . . . . . . . . 222
Встроенные прототипы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Прокладки совместимости (shims)/полифилы (polyfills) . . . 227