{Вы не знаете JS} Типы и грамматические конструкции
Каким бы опытом программирования на JavaScript вы ни обладали, скорее всего, вы не понимаете язык в полной мере. Это лаконичное руководство исследует типы более глубоко, чем все существующие книги: вы узнаете как работают типы, о проблемах их преобразования, и научитесь пользоваться новыми возможностями.
Как и в других книгах серии «Вы не знаете JS», здесь рассматриваются нетривиальные аспекты языка, от которых программисты JavaScript предпочитают держаться подальше (или полагают, что они не существуют). Вооружившись этими знаниями, вы достигнете истинного мастерства JavaScript.
В книге рассматриваются следующие темы:
- Семь типов данных JavaScript: null, undefined, boolean, number, string, object и symbol.
- Уникальные особенности массивов, строк и чисел JavaScript, их достоинства и недостатки.
- Встроенные объектные обертки для примитивных значений.
- Странности преобразования типов и его полезность во многих ситуациях.
- Различные нюансы синтаксиса JavaScript: команды, выражения и т.д.
Об авторе:
Кайл Симпсон - евангелист Open Web и энтузиаст JavaScript. Он пишет книги, читает лекции, выступает на семинарах, конференциях и является лидером OSS.
Предисловие. 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
Проверка целых чисел. 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
Явные преобразования: разбор числовых строк. 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
try..finally . 208
switch. 212
Итоги. 215
Приложение А. JavaScript в разных средах . 218
Дополнение B (ECMAScript). 218
Web ECMAScript. 219
Управляющие объекты. 221
Глобальные переменные DOM. 222
Встроенные прототипы. 223
Прокладки совместимости (shims)/полифилы (polyfills). 227
<script>ы. 229
Зарезервированные слова. 233
Ограничения реализации . 234
Итоги. 235
Об авторе. 236