第1章 对象和原型 1
1.1 鸟瞰JavaScript 1
1.2 对象概述 3
1.2.1 对象化 3
1.2.2 原型编程 20
1.3 小结 29
第2章 函数 30
2.1 JavaScript中的代码块 30
2.2 小结 44
第3章 闭包 45
3.1 作用域的真相 45
3.1.1 理解this关键字 46
3.1.2 块级作用域 48
3.2 第一个闭包程序 49
3.3 为什么要用闭包 50
3.4 小结 53
第4章 术语和俚语 54
4.1 Jargon.prototype=new Slang() 54
4.2 强转 55
4.2.1 转为String 56
4.2.2 转为数字 56
4.2.3 强转的陷阱 57
4.3 逻辑运算符 61
4.3.1 逻辑与(&&) 61
4.3.2 逻辑或(||) 62
4.3.3 逻辑非(!) 62
4.4 位变换 65
4.4.1 按位与(&) 65
4.4.2 按位或(|) 67
4.4.3 按位异或(^) 68
4.4.4 按位非(~) 69
4.4.5 位移操作(<<,>>,>>>) 69
4.5 不易读代码 71
4.5.1 暗中的eval 71
4.5.2 进制 71
4.5.3 Unicode编码的变量 72
4.5.4 真正的WAT在这里 72
4.6 小结 73
4.7 补充参考资料 74
第5章 异步生活 75
5.1 理解JavaScript中的并发 75
5.2 理解JavaScript的事件循环 77
5.2.1 运行至完成 77
5.2.2 事件触发的设计 77
5.2.3 深入事件循环 77
5.3 回调 79
5.3.1 感知性能 80
5.3.2 后续传递风格 81
5.3.3 回调地狱 82
5.4 promise:从未来返回 83
5.5 生成器和协程 85
5.5.1 生成器 86
5.5.2 协程的约定 88
5.5.3 可持续生成器 89
5.6 Web workers 91
5.6.1 并发 91
5.6.2 知道什么时候做一个工头 91
5.6.3 雇佣worker 92
5.7 小结 100
第6章 JavaScript的IRL 102
6.1 硬件发烧友的日记 102
6.1.1 消防软管 102
6.1.2 每个人都可以玩的硬件 103
6.1.3 了解物理硬件 103
6.2 物理计算 104
6.3 为什么要使用JavaScript 105
6.3.1 搭建桥梁 106
6.3.2 响应式编程范式 106
6.4 NodeBots:快速,廉价和伺服控制 107
6.4.1 REPL 108
6.4.2 为何要多此一举 108
6.4.3 前提条件 109
6.4.4 Arduino IDE 110
6.4.5 Node串行端口 112
6.4.6 Firmata 115
6.4.7 Johnny-Five 118
6.5 Fauxbots 123
6.6 其他资源 123
第7章 风格 124
7.1 什么是风格 124
7.2 什么是编程风格 125
7.2.1 一致性 125
7.2.2 表达能力 125
7.2.3 简洁 125
7.2.4 约束性 126
7.3 JavaScript风格指南 126
7.3.1 视觉清晰度规则 126
7.3.2 计算有效性规则 134
7.4 实施代码风格 139
7.4.1 美化器(Beautifiers) 139
7.4.2 通过IDE实施 140
7.5 小结 143
第8章 工作流 144
8.1 不要铲雪 144
8.2 什么是工作流 144
8.3 合理的JavaScript开发工作流 145
8.4 工具的选择 145
8.4.1 订购工具 146
8.4.2 依赖关系管理 148
8.4.3 保护升级路径 149
8.5 引导程序 150
8.6 开发 153
8.7 测试 157
8.7.1 如何测试 157
8.7.2 Karma 157
8.7.3 PhantomJS 159
8.7.4 测试什么 160
8.8 构建 163
8.8.1 编译 163
8.8.2 分析 163
8.8.3 拼接 163
8.8.4 优化 163
8.8.5 测试 164
8.8.6 通知 164
8.9 支持 164
8.9.1 JavaScript中的错误报告 165
8.9.2 源码映射 165
8.10 小结 165
第9章 代码质量 167
9.1 定义代码质量 167
9.1.1 主观质量 168
9.1.2 客观质量 168
9.2 如何度量质量 168
9.3 为什么要度量代码质量 169
9.4 度量JavaScript代码质量 170
9.5 小结 188
第10章 提高可测试性 189
10.1 为什么测试无法测试 189
10.1.1 测试谬论 190
10.1.2 确认偏见 193
10.2 找到基线 195
10.2.1 语句覆盖 196
10.2.2 函数覆盖 197
10.2.3 分支覆盖 197
10.2.4 Istanbul 198
10.2.5 覆盖率偏见 199
10.3 偏见消除测试 200
10.3.1 模糊测试 200
10.3.2 JSCheck 202
10.3.3 自动测试 206
10.4 小结 207