描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111648369
本书从JavaScript的基本语言特性入手,提纲挈领地介绍JavaScript的主要功能和特色,包括基本结构、函数、数据结构、高阶函数、错误处理、正则表达式、模块、异步编程、浏览器文档对象模型、事件处理、绘图、HTTP表单、Node等,可以帮助你循序渐进地掌握基本的编程概念、技术和思想。而且书中提供5个项目实战章节,涉及路径查找、自制编程语言、平台交互游戏、绘图工具和动态网站,可以帮助你快速上手实际的项目。此外,本书还介绍了JavaScript性能优化的方法论、思路和工具,以帮助我们开发高效的程序。
本书与时俱进,这一版包含了JavaScript语言ES6规范的新功能,如绑定、常量、类、promise等。通过本书的学习,你将了解JavaScript语言的新发展,编写出更强大的代码。
本书的在线网站提供了所有源代码,你可以通过在线沙箱来编辑、运行代码,并实时查看输出结果。
适读人群:本书适合零基础入门读者阅读。
本书第3版深入研究JavaScript语言,详细介绍如何编写漂亮、高效的代码。更新的内容包括:类表示法、箭头函数、迭代器、异步函数、模板字符串和块作用域等功能的全新内容。
本书通过大量示例进行讲解,并提供大量习题和完整项目案例,为读者提供了编写自己的程序的实践经验。书中不仅介绍JavaScript语言的基本结构以及控制结构、函数和数据结构,还详细介绍错误处理和错误修复、模块化和异步编程,以及Web浏览器编程。
本书赞誉
译者序
前言
第一部分 语言
第1章 值、类型和运算符 2
1.1 值 2
1.2 数字 3
1.2.1 算术 4
1.2.2 特殊数字 4
1.3 字符串 4
1.4 一元运算符 6
1.5 布尔值 6
1.5.1 比较 6
1.5.2 逻辑运算符 7
1.6 空值 8
1.7 自动类型转换 8
1.8 小结 10
第2章 程序结构 11
2.1 表达式和语句 11
2.2 绑定 12
2.3 绑定名称 13
2.4 环境 13
2.5 函数 14
2.6 console.log函数 14
2.7 返回值 15
2.8 控制流 15
2.9 条件执行 15
2.10 while和do循环 17
2.11 缩进代码 18
2.12 for循环 19
2.13 跳出循环 19
2.14 简洁地更新绑定 20
2.15 使用switch调度值 20
2.16 首字母大写 21
2.17 注释 22
2.18 小结 22
2.19 习题 22
第3章 函数 24
3.1 定义一个函数 24
3.2 绑定和作用域 25
3.3 作为值的函数 27
3.4 声明表示法 27
3.5 箭头函数 28
3.6 调用栈 28
3.7 可选参数 29
3.8 闭包 30
3.9 递归 31
3.10 函数的增长方式 34
3.11 函数和副作用 36
3.12 小结 36
3.13 习题 37
第4章 数据结构:对象和数组 38
4.1 松鼠人 38
4.2 数据集 39
4.3 属性 39
4.4 方法 40
4.5 对象 41
4.6 可变性 43
4.7 松鼠人的日志 44
4.8 计算相关性 45
4.9 数组循环 46
4.10 最终分析 47
4.11 其他数组方法 48
4.12 字符串及其属性 50
4.13 剩余参数 51
4.14 Math对象 52
4.15 解构 53
4.16 JSON 54
4.17 小结 54
4.18 习题 55
第5章 高阶函数 57
5.1 抽象化 58
5.2 提取重复的内容 58
5.3 高阶函数 59
5.4 语言字符集数据集 60
5.5 过滤数组 61
5.6 用map转换 62
5.7 用reduce汇总 62
5.8 组合性 63
5.9 字符串和字符代码 64
5.10 文本识别 66
5.11 小结 67
5.12 习题 67
第6章 对象的秘密 69
6.1 封装 69
6.2 方法 70
6.3 原型 71
6.4 类 72
6.5 类表示法 73
6.6 覆盖派生属性 74
6.7 映射 75
6.8 多态性 76
6.9 符号 76
6.10 迭代器接口 78
6.11 读取器、设置器和静态 79
6.12 继承 81
6.13 instanceof运算符 82
6.14 小结 82
6.15 习题 83
第7章 项目:机器人 85
7.1 村庄Meadowf?ield 85
7.2 任务 86
7.3 持久化数据 88
7.4 模拟 89
7.5 邮车的路线 90
7.6 寻找路线 91
7.7 习题 92
第8章 缺陷和错误 94
8.1 语言 94
8.2 严格模式 95
8.3 类型 96
8.4 测试 96
8.5 调试 97
8.6 错误传播 98
8.7 异常 99
8.8 异常后清理 100
8.9 选择性捕获 102
8.10 断言 103
8.11 小结 104
8.12 习题 104
第9章 正则表达式 106
9.1 创建正则表达式 106
9.2 匹配测试 107
9.3 字符集 107
9.4 模式的重复部分 108
9.5 对子表达式分组 109
9.6 匹配和组 109
9.7 Date类 110
9.8 单词和字符串边界 111
9.9 选择模式 112
9.10 匹配机制 112
9.11 回溯 113
9.12 replace方法 114
9.13 贪心 116
9.14 动态创建RegExp对象 117
9.15 search方法 117
9.16 lastIndex属性 118
9.17 解析INI文件 119
9.18 国际字符 121
9.19 小结 122
9.20 习题 123
第10章 模块 124
10.1 模块作为构件 124
10.2 包 125
10.3 简易模块 126
10.4 将数据作为代码执行 127
10.5 CommonJS 127
10.6 ECMAScript模块 129
10.7 构建和捆绑 130
10.8 模块设计 131
10.9 小结 132
10.10 习题 133
第11章 异步编程 134
11.1 异步 134
11.2 乌鸦技术 135
11.3 回调 136
11.4 promise 138
11.5 失败 139
11.6 构建网络很困难 140
11.7 promise集合 142
11.8 网络泛洪 142
11.9 消息路由 143
11.10 异步函数 145
11.11 生成器 147
11.12 事件循环 148
11.13 异步bug 149
11.14 小结 150
11.15 习题 150
第12章 项目:编程语言 152
12.1 解析 152
12.2 求解器 156
12.3 特殊形式 157
12.4 环境 158
12.5 函数 159
12.6 编译 160
12.7 作弊 161
12.8 习题 161
第二部分 浏览器
第13章 浏览器中的JavaScript 164
13.1 网络和互联网 164
13.2 Web 165
13.3 HTML 166
13.4 HTML和JavaScript 168
13.5 沙盒 168
13.6 兼容性和浏览器大战 169
第14章 文档对象模型 170
14.1 文档结构 170
14.2 树 171
14.3 标准 172
14.4 通过树结构 173
14.5 寻找元素 174
14.6 更改文档 175
14.7 创建节点 175
14.8 属性 177
14.9 布局 177
14.10 样式 179
14.11 层叠样式 180
14.12 查询选择器 181
14.13 定位和动画 182
14.14 小结 184
14.15 习题 184
第15章 处理事件 186
15.1 事件处理程序 186
15.2 事件和DOM节点 187
15.3 事件对象 188
15.4 传播 188
15.5 默认操作 189
15.6 按键事件 190
15.7 指针事件 191
15.7.1 鼠标点击 191
15.7.2 鼠标移动 192
15.7.3 触摸事件 193
15.8 滚动事件 194
15.9 焦点事件 195
15.10 加载事件 196
15.11 事件和事件循环 196
15.12 计时器 197
15.13 限频 198
15.14 小结 199
15.15 习题 199
第16章 项目:平台游戏 201
16.1 游戏 201
16.2 技术 202
16.3 关卡 202
16.4 读取关卡 203
16.5 演员 204
16.6 封装是一种负担 207
16.7 绘图 207
16.8 动作和碰撞 211
16.9 演员的更新 214
16.10 跟踪按键 215
16.11 运行游戏 216
16.12 习题 218
第17章 在画布上绘图 219
17.1 SVG 219
17.2 画布元素 220
17.3 线和面 221
17.4 路径 222
17.5 曲线 223
17.6 绘制饼图 225
17.7 文本 226
17.8 图片 227
17.9 转换 228
17.10 存储和清除转换 230
17.11 回到游戏 231
17.12 选择图形界面 236
17.13 小结 236
17.14 习题 237
第18章 HTTP和表单 239
18.1 协议 239
18.2 浏览器和HTTP 241
18.3 fetch 242
18.4 HTTP沙盒 243
18.5 欣赏HTTP 243
18.6 安全性和HTTPS 244
18.7 表单域 244
18.8 焦点 246
18.9 禁用域 247
18.10 表单整体 247
18.11 文本域 248
18.12 复选框和单选按钮 249
18.13 选择域 250
18.14 文件域 251
18.15 在客户端存储数据 252
18.16 小结 254
18.17 习题 255
第19章 项目:像素绘图程序 257
19.1 组件 257
19.2 状态 259
19.3 DOM的建立 260
19.4 画布 261
19.5 应用程序 263
19.6 绘图工具 264
19.7 保存和加载 267
19.8 撤销历史记录 269
19.9 让我们画吧 270
19.10 为什么这么难 271
19.11 习题 271
第三部分 Node
第20章 Node.js 276
20.1 背景 276
20.2 node命令 277
20.3 模块 277
20.4 使用NPM安装 278
20.4.1 包文件 279
20.4.2 版本 279
20.5 文件系统模块 280
20.6 HTTP模块 281
20.7 流 283
20.8 文件服务器 284
20.9 小结 288
20.10 习题 289
第21章 项目:技能分享网站 290
21.1 设计 290
21.2 长轮询 291
21.3 HTTP接口 292
21.4 服务器 293
21.4.1 路由器 293
21.4.2 提供文件服务 294
21.4.3 作为资源的讨论 295
21.4.4 长轮询支持 297
21.5 客户端 299
21.5.1 HTML 299
21.5.2 操作 299
21.5.3 展现组件 301
21.5.4 轮询 302
21.5.5 应用程序 303
21.6 习题 304
第22章 JavaScript性能 305
22.1 分阶段编译 305
22.2 图的布局 306
22.3 定义图 307
22.4 力导向布局 308
22.5 避免工作 310
22.6 分析器 312
22.7 函数内联 313
22.8 减少垃圾 314
22.9 垃圾收集 314
22.10 动态类型 315
22.11 小结 316
22.12 习题 317
附录 部分习题解答提示 318
本书讲述如何指挥计算机开展工作。如今计算机与螺丝刀一样普遍,但它们比螺丝刀复杂得多,让它们完成你想做的工作并不容易。
如果是一个常见的、易于理解的任务,例如显示你的电子邮件或充当计算器,你可以打开相应的应用程序并开始工作。但对于独一无二或开放式的任务,可能没有现成的应用程序可用。
这就是编程的用武之地。编程是构建程序的行为,而程序是一组告诉计算机该做什么的精确指令。因为计算机是头脑简单、死板的,编程基本上是单调乏味和令人沮丧的。
幸运的是,如果你能克服这些,甚至可能享受愚笨的机器可以处理的严谨思维,那么编程可以带来丰厚的回报。它允许你在几秒钟内完成手工永远无法完成的操作。这是一种让你的计算机工具做以前无法做的事情的方法。它提供了抽象思维的精彩练习。
大多数编程活动都是用编程语言完成的。编程语言是用于指导计算机的人造语言。有趣的是,我们发现与计算机通信的最有效方式是从人类彼此通信的方式中借鉴大量的内容。与人类语言一样,计算机语言允许以新的方式组合单词和短语,从而可以表达新的概念。
基于语言的界面,例如20世纪80年代和90年代的BASIC和DOS提示符,在某种程度上曾经是与计算机交互的主要方法。它们在很大程度上被图形界面取代,图形界面更容易学习,但提供的自由度更低。如果你知道计算机语言的藏身之处,就仍然可以把它们用起来。每种现代Web浏览器都内置了一种这样的语言——JavaScript,因此它几乎可以在每台设备上使用。
本书将努力让你熟悉这种语言,以便用它来做有用和有趣的事情。
关于编程
除了解释JavaScript之外,我还将介绍编程的基本原理。事实证明,编程很难。基本规则简单明了,但基于这些规则构建的程序往往变得非常复杂,从而无法说明其规则和复杂性。编程在某种程度上构建了自己的迷宫,你可能会迷失在里面。
有时读这本书会让人非常沮丧。如果你不熟悉编程,那么会有很多新内容需要消化。其次,大部分时候都需要你具备其他相关知识才能理解这些内容的组合。
你需要付出必要的努力。当你努力学习这本书时,不要对自己的能力有任何怀疑。你很优秀——只需要坚持下去。休息一下,重读一些章节,并确保阅读并理解示例程序和练习。学习是一项艰苦的工作,但你学到的一切都属于自己,并且会使后续的学习变得更容易。
当行动变得无利可图时,收集信息;
当信息变得无利可图时,睡觉。
—Ursula K. Le Guin,《黑暗的左手》
程序这个词有多重含义。它是由程序员键入的一段文本,是使计算机完成任务的指挥力量,它也是计算机内存中的数据,它还控制在同一内存上执行的操作。将程序与我们熟悉的对象进行类比往往不尽如人意。有一种表面上比较恰当的比喻,即把程序视作包含许多零件的机器,为了使整台机器正常运转,我们必须考虑如何将这些零件相互连接起来,并实现整体的运转。
计算机是一台承载这些无形机器的物理机器。计算机本身只能做简单直接的事情。它们如此有用的原因是它们做这些事情的速度极快。程序可以巧妙地结合大量简单的动作来完成非常复杂的事情。
程序是思想的结晶。构造它不需要成本,它也没有重量,通过打字我们很容易把它创造出来。
但是,如果不加注意,程序的大小和复杂性将会失去控制,甚至会使构造它的人无法理解。保持程序受控是编程中需要考虑的主要问题。当一个程序正常工作时,它是优美的。编程艺术是控制复杂性的技能。出色的程序都是简明的,它们的复杂性都不太高。
一些程序员认为管理这种复杂性的最好办法是只在程序中使用一小部分易于理解的技术。他们制定了严格的规则(“最佳实践”)来规定程序应该具有的形式,并小心地把它们限定在很小的安全范围内。
这不仅无聊,而且效果不佳。新问题通常需要新的解决方案。编程的历史不长,并且仍在迅速发展,而且它的变化足以为不同的方法提供空间。在程序设计中有很多可怕的错误,应该继续大胆犯错以加深你的理解。编写好程序的感觉是在编程实践中培养起来的,而不是从一系列规则中学到的。
为什么语言很重要
在计算机诞生之初,没有编程语言。程序看起来像是这样的:
这是一个将数字从1到10加在一起并打印出结果的程序:1 2 … 10 = 55。它可以运行在一台简单的虚拟机器上。要对早期的计算机进行编程,必须在正确的位置设置大型开关阵列,或者在纸带上打孔并将它们送入计算机。你可以想象编写这种程序是多么乏味和容易出错。即使编写简单的程序也需要很多聪明才智和规则。编写复杂的程序几乎是不可思议的。
当然,手动输入这些神秘的二进制位(1和0)模式确实给程序员一种强烈的成就感,仿佛自己成了魔法师。在工作满意度方面,这一定非常令人满足。
先前程序的每一行都包含一条指令。它可以用如下中文表达:
(1)将数字0存储在内存位置0中。
(2)将数字1存储在内存位置1中。
(3)将内存位置1的值存储在内存位置2中。
(4)从内存位置2的值中减去数字11。
(5)如果内存位置2的值为数字0,则继续执行指令9。
(6)将内存位置1的值添加到内存位置0。
(7)将数字1添加到内存位置1的值中。
(8)继续执
评论
还没有评论。