JavaScript 学习指南

JavaScript 学习指南
编辑推荐
这是学习 JavaScript 的一个大时代。新的 JavaScript 标准——ECMAScript 6.0 (ES6) 已经定稿,学习如何使用这种语言来开发高质量的应用程序变得前所未有的简单和舒服。 本书将带领程序员开启一次充实的 ES6 之旅,同时也会介绍一些相关的工具和技术。本书不仅会介绍基础知识(比如变量、控制流和数组),还会讲解函数式编程和异步编程等复杂的概念。你将会学习如何在客户端(或者在服务端使用 Node.js)构建强大的响应式 Web 应用。
通过阅读本书,你将学会:
- ■ 使用 ES6 编程,然后通过转译来兼容 ES5;
- ■ 将数据转换为 JavaScript 可以使用的格式;
- ■ 理解 JavaScript 中函数的基本用法和机制;
- ■ 探索对象和面向对象编程;
- ■ 了解新的概念,比如迭代器、生成器和代理;
- ■ 理解异步编程的复杂性;
- ■ 利用文档对象模型(DOM)来构建基于浏览器的应用;
- ■ 学习 Node.js 的基础知识来构建服务器端应用程序。
这是开发者学习 JS 的一个大时代。但是我说的并不是那种‘我的代码能跑起来’一样的小打小闹。这本书将带你更深入地学习我们所需的那些知识。” ——Kyle Simpson 《你不知道的 JavaScript》系列书作者
“这本书写得很好,内容紧凑,介绍了 JavaScript 的一切,甚至包含了 ECMAScript 6。” ——Axel Rauschmayer 《深入理解 JavaScript》作者
内容简介
JavaScript 是目前 Web 开发领域非常流行的一种编程语言,得到众多 IT 从业人员和编程爱好者的关注。 本书分为 22 章,在 ES6 的基础上,系统地介绍了 JavaScript 的基本语法、语言特性、相关工具、基本对象、技术以及推动现代 JavaScript 开发的范例等方面的知识。本书内容由浅及深,既有变量、控制流、函数等基础内容,又有异步编程、正则表达式等高级知识。 本书适合具备一定 JavaScript 基础知识的读者阅读,也适合从事程序设计工作并想要深入探索 JavaScript 语言的读者阅读。
作者简介
Ethan Brown 是互动营销公司 Pop Art 的工程总监,负责网站和网络服务的架构和实现,面向从小公司到跨国企业的多种客户。他有着超过 20 年的编程经验。
目录
第 1 章 第一个应用 1
- 1.1 从哪里开始 2
- 1.2 实用的工具 2
- 1.2.1 语法高亮 3
- 1.2.2 括号匹配 3
- 1.2.3 代码折叠 4
- 1.2.4 自动补全 4
- 1.3 关注注释 4
- 1.4 从这里开始 5
- 1.5 JavaScript 控制台 7
- 1.6 jQuery 8
- 1.7 绘制图元 8
- 1.8 自动执行重复任务 10
- 1.9 处理用户输入 11
- 1.10 Hello, World 13
第 2 章 JavaScript 开发中的常用工具 14
- 2.1 在当下编写 ES6 代码 14
- 2.2 ES6 的新特性 15
- 2.2.1 安装 Git 16
- 2.2.2 终端 16
- 2.2.3 项目根目录 17
- 2.2.4 版本控制:Git 17
- 2.2.5 包管理工具:npm 20
- 2.2.6 构建工具:Gulp 和 Grunt 22
- 2.2.7 项目结构 23
- 2.3 转换器 24
- 2.3.1 使用 Gulp 运行 Babel 24
- 2.3.2 格式审查工具 26
- 2.4 总结 29
第 3 章 字面量、变量、常量和数据类型 32
- 3.1 变量和常量 32
- 3.2 变量和常量:用哪个 33
- 3.3 标识符命名 34
- 3.4 字面量 35
- 3.5 基本类型和对象 36
- 3.6 数字 37
- 3.7 字符串 39
- 3.8 特殊字符 40
- 3.8.1 模板字符串 41
- 3.8.2 多行字符串 42
- 3.8.3 数字用作字符串 43
- 3.9 布尔型 43
- 3.10 符号 43
- 3.11 null 和 undefined 44
- 3.12 对象 44
- 3.13 Number, String 和 Boolean 对象 47
- 3.14 数组 47
- 3.15 对象和数组的拖尾逗号 49
- 3.16 日期 50
- 3.17 正则表达式 50
- 3.18 映射和集合 51
- 3.19 数据类型转换 51
- 3.19.1 转换成数字 51
- 3.19.2 转换成字符串 52
- 3.19.3 转换成布尔型 52
- 3.20 总结 53
第 4 章 控制流 54
- 4.1 控制流的底层 54
- 4.1.1 while 循环 57
- 4.1.2 块语句 58
- 4.1.3 空格 59
- 4.1.4 辅助方法 60
- 4.1.5 if else 语句 60
- 4.1.6 do...while 循环 62
- 4.1.7 for 循环 63
- 4.1.8 if 语句 64
- 4.1.9 最后的整合 65
- 4.2 JavaScript 中的控制语句 66
- 4.2.1 控制流异常 67
- 4.2.2 链式 if… else 语句 67
- 4.2.3 元语法 68
- 4.2.4 其他循环模式 69
- 4.2.5 switch 语句 70
- 4.2.6 for…in 循环 74
- 4.2.7 for…of 循环 74
- 4.3 实用的控制流模式 74
- 4.3.1 使用 continue 减少条件嵌套 75
- 4.3.2 使用 break 或 return 避免不必要的计算 75
- 4.3.3 在循环结束后使用索引的值 76
- 4.3.4 列表变动时索引递减 76
- 4.4 总结 77
第 5 章 表达式和运算符 78
- 5.1 运算符 79
- 5.2 算术运算符 80
- 5.3 运算符优先级 82
- 5.4 比较运算符 83
- 5.5 比较数字 85
- 5.6 字符串连接 86
- 5.7 逻辑运算符 87
- 5.8 与、或和非 88
- 5.8.1 短路求值 89
- 5.8.2 非布尔值的逻辑运算符 89
- 5.8.3 条件运算符 90
- 5.8.4 逗号运算符 91
- 5.9 分组运算符 91
- 5.9.1 位运算符 91
- 5.9.2 类型判断运算符 93
- 5.9.3 void 运算符 94
- 5.9.4 赋值运算符 94
- 5.10 解构赋值 95
- 5.11 对象和数组运算符 97
- 5.12 模板字符串中的表达式 97
- 5.13 表达式和控制流模式 97
- 5.13.1 将 if…else 语句转化成条件表达式 98
- 5.13.2 将 if 语句转化成短路求值的逻辑或(||)表达式 98
- 5.14 总结 98
第 6 章 函数 99
- 6.1 返回值 100
- 6.2 引用调用 100
- 6.3 函数参数 101
- 6.3.1 参数会让函数有所区别吗 103
- 6.3.2 解构参数 104
- 6.3.3 默认参数 105
- 6.4 函数作为对象属性 105
- 6.5 this 关键字 105
- 6.6 函数表达式和匿名函数 107
- 6.7 箭头符号 109
- 6.8 调用、请求和绑定 110
- 6.9 总结 112
第 7 章 作用域 113
- 7.1 作用域和存在 114
- 7.2 静态作用域与动态作用域 114
- 7.3 全局作用域 115
- 7.4 块作用域 117
- 7.5 变量屏蔽 117
- 7.6 函数、闭包和静态作用域 119
- 7.7 即时调用函数表达式 120
- 7.8 函数作用域和提升 121
- 7.9 函数提升 123
- 7.10 临时死区 124
- 7.11 严格模式 124
- 7.12 总结 125
第 8 章 数组及其处理 126
- 8.1 数组概览 126
- 8.2 操作数组内容 127
- 8.2.1 在起始和末尾添加或删除元素 128
- 8.2.2 在末尾添加多个元素 128
- 8.2.3 获取子数组 128
- 8.2.4 从任意位置添加或删除元素 129
- 8.2.5 数组内的分割和替换 129
- 8.2.6 用指定值填充数组 129
- 8.2.7 数组反转和排序 130
- 8.3 数组搜索 130
- 8.4 数组的基本操作:map 和 filter 133
- 8.5 数组魔法:reduce 135
- 8.6 数组方法,已删除或者未定义的元素 138
- 8.7 字符串连接 138
- 8.8 总结 139
第 9 章 对象以及面向对象编程 141
- 9.1 属性枚举 141
- 9.1.1 for...in 142
- 9.1.2 Object.keys 142
- 9.2 面向对象编程 143
- 9.2.1 创建类和实例 143
- 9.2.2 动态属性 145
- 9.2.3 类即函数 146
- 9.2.4 原型 147
- 9.2.5 静态方法 148
- 9.2.6 继承 149
- 9.2.7 多态 151
- 9.2.8 枚举对象属性,回顾 151
- 9.2.9 字符串表示 152
- 9.3 多继承、混合类和接口 153
- 9.4 总结 155
第 10 章 Maps 和 Sets 156
- 10.1 Maps 156
- 10.2 Weak Maps 158
- 10.3 Sets 159
- 10.4 Weak Sets 160
- 10.5 打破对象习惯 161
第 11 章 异常和错误处理 162
- 11.1 Error 对象 162
- 11.2 使用 try 和 catch 处理异常 163
- 11.3 抛出异常 164
- 11.4 异常处理和调用栈 165
- 11.5 try...catch... finally 166
- 11.6 让异常成为例外 167
第 12 章 迭代器和生成器 168
- 12.1 迭代协议 170
- 12.2 生成器 172
- 12.2.1 yield 表达式和双向交流 173
- 12.2.2 生成器和返回值 175
- 12.3 总结 175
第 13 章 函数和抽象思考的力量 176
- 13.1 函数作为子程序 176
- 13.2 函数作为有返回值的子程序 177
- 13.3 函数即…函数 178
- 13.4 那又如何? 180
- 13.5 IIEFs 和异步代码 182
- 13.6 函数变量 184
- 13.6.1 数组中的函数 186
- 13.6.2 将函数传给函数 187
- 13.6.3 在函数中返回函数 188
- 13.7 递归 189
- 13.8 总结 190
第 14 章 异步编程 191
- 14.1 类比 192
- 14.2 回调 192
- 14.2.1 setInterval 和 clearInterval 193
- 14.2.2 Scope 和异步执行 194
- 14.2.3 错误优先回调 195
- 14.2.4 回调地狱 196
- 14.3 Promise 197
- 14.3.1 创建 Promise 198
- 14.3.2 使用 Promise 198
- 14.3.3 事件 200
- 14.3.4 Promise 链 202
- 14.3.5 避免不被处理的 Promise 203
- 14.4 生成器 205
- 14.4.1 向前一步和退后两步 207
- 14.4.2 不要自己编写生成器运行器 208
- 14.4.3 生成器运行器中的异常处理 208
- 14.5 总结 209
第 15 章 日期和时间 211
- 15.1 日期、时区、时间戳以及 Unix 时间 211
- 15.2 构造 Date 对象 212
- 15.3 Moment.js 213
- 15.4 JavaScript 中 Date 的实际用法 214
- 15.5 构造日期对象 214
- 15.5.1 在服务端构造日期对象 214
- 15.5.2 在浏览器中构造 Date 对象 215
- 15.6 传递日期 215
- 15.7 展日期 216
- 15.8 日期的组成 217
- 15.9 日期的比较 218
- 15.10 日期的四则运算 218
- 15.11 用户友好的相对日期 219
- 15.12 总结 220
第 16 章 数学运算 221
- 16.1 格式化数字 221
- 16.1.1 固定小数 222
- 16.1.2 指数符号 222
- 16.1.3 固定精度 222
- 16.1.4 不同进制 223
- 16.1.5 进一步格式化数字 223
- 16.2 常量 224
- 16.3 代数函数 224
- 16.3.1 幂运算 224
- 16.3.2 对数函数 225
- 16.3.3 其他函数 225
- 16.3.4 伪随机数生成器 226
- 16.4 三角函数 227
- 16.5 双曲线函数 227
第 17 章 正则表达式 229
- 17.1 子字符串匹配和替换 229
- 17.2 构造正则表达式 230
- 17.3 使用正则表达式进行搜索 231
- 17.4 使用正则表达式进行替换 231
- 17.5 消费输入 232
- 17.6 分枝 234
- 17.7 匹配 HTML 235
- 17.8 字符集 235
- 17.9 具名字符集 236
- 17.10 重复 237
- 17.11 句点元字符和转义 238
- 17.12 分组 238
- 17.13 懒惰匹配,贪婪匹配 240
- 17.14 反向引用 241
- 17.15 替换组 242
- 17.16 函数替换 243
- 17.17 锚点 245
- 17.18 单词边界匹配 245
- 17.19 向前查找 247
- 17.20 动态构造正则表达式 248
- 17.21 总结 248
第 18 章 浏览器中的 JavaScript 249
- 18.1 ES5 还是 ES6 249
- 18.2 文档对象模型 250
- 18.3 关于树的专用语 252
- 18.4 DOM 中的“Get”方法 253
- 18.5 查询 DOM 元素 253
- 18.6 多个 DOM 元素 254
- 18.7 创建 DOM 元素 255
- 18.8 样式元素 256
- 18.9 数据属性 257
- 18.10 事件 258
- 18.11 事件捕获与事件冒泡 259
- 18.12 Ajax 263
- 18.13 总结 267
第 19 章 jQuery 268
- 19.1 万能的美元(符号) 268
- 19.2 引入 jQuery 269
- 19.3 等待 DOM 加载 269
- 19.4 jQuery 封装的 DOM 元素 270
- 19.5 操作元素 270
- 19.6 展开 jQuery 对象 272
- 19.7 Ajax 273
- 19.8 总结 273
第 20 章 Node 274
- 20.1 Node 基础 274
- 20.2 模块(Module) 275
- 20.3 核心 module、文件 module 和 npm module 277
- 20.4 自定义函数 Module 279
- 20.5 访问文件系统 281
- 20.6 进程 284
- 20.7 操作系统 286
- 20.8 子进程 287
- 20.9 流 288
- 20.10 Web 服务器 289
- 20.11 总结 291
第 21 章 对象属性配置和代理 292
- 21.1 存取器属性:getter 和 setter 292
- 21.2 对象属性的属性 294
- 21.3 对象保护:冻结、封装、以及阻止扩展 296
- 21.4 代理 299
- 21.5 总结 301
第 22 章 附加资源 302
- 22.1 在线文档 302
- 22.2 期刊 303
- 22.3 博客和教程 303
- 22.4 Stack Overflow 304
- 22.5 给开源项目做贡献 306
- 22.6 总结 307