第1章 初入 JavaScript	001
1.1 JavaScript 简介	002
1.2 JavaScript 起源	003
1.3 JavaScript 实现	004
1.3.1 ECMAScript	004
1.3.2 BOM	005
1.3.3 DOM	005
1.4 JavaScript 使用	005
1.4.1 内联的 JavaScript	005
1.4.2 外部的 JavaScript	006
1.4.3 行内的 JavaScript	007
第2章 准备工作	008
2.1 开发工具	009
2.1.1 Sublime Text	009
2.1.2 Visual Studio Code	010
2.1.3 WebStorm	011
2.1.4 Atom	012
2.2 Chrome 开发者工具	012
2.2.1 信息类方法	013
2.2.2 清除历史记录	013
2.2.3 保留历史记录	014
第3章 语法	015
3.1 基本语法	016
3.1.1 语句	016
3.1.2 注释	016
3.1.3 标识符	017
3.2 变量和变量作用域	019
3.2.1 变量	019
3.2.2 声明变量	019
3.2.3 非声明变量	024
3.3 数据类型	025
3.3.1 内存空间	025
3.3.2 基本数据类型与引用数据类型	025
3.3.3 浅拷贝与深拷贝	027
3.3.4 typeof 与 instanceof	029
3.3.5 类型转换	031
3.3.6 基本包装类型	035
3.4 字符串	036
3.4.1 字符串的特点	039
3.4.2 length 属性	039
3.4.3 实例方法	039
3.5 运算符	048
3.5.1 算术运算符	048
3.5.2 逻辑运算符	050
3.5.3 比较运算符	051
3.5.4 三元运算符	052
3.5.5 赋值	053
3.5.6 位运算符	054
3.5.7 异步操作符 async function	055
3.5.8 其他运算符	059
3.5.9 运算符优先级	060
3.6 条件语句	062
3.6.1 if 语句	062
3.6.2 switch 语句	063
3.6.3 三元运算符	064
3.7 循环语句	065
3.7.1 for	065
3.7.2 while	065
3.7.3 for…in	067
3.7.4 for…of	068
3.7.5 break 和 continue 语句	068
3.8 错误处理	069
3.8.1 try…catch	069
3.8.2 throw	070
3.9 严格模式	070
第4章 函数	072
4.1 定义	073
4.1.1 返回值	073
4.1.2 箭头函数(Arrow Function)	074
4.1.3 关于 this	075
4.2 函数的属性和方法	080
4.2.1 length 属性	080
4.2.2 name	080
4.3 参数	080
4.3.1 按值传递	081
4.3.2 arguments	082
4.3.3 Rest 参数(剩余参数)	083
4.3.4 箭头函数中的 arguments 对象	083
4.3.5 默认参数	083
4.4 递归	084
4.5 闭包	086
4.5.1 什么是闭包	087
4.5.2 实践中的闭包	087
4.6 IIFE	089
4.7 高阶函数	090
4.7.1 回调函数	090
4.7.2 偏函数	091
4.7.3 柯里化	091
4.7.4 纯函数	092
第5章 数组	093
5.1 定义	094
5.2 多维数组	094
5.3 length 属性	094
5.4 方法	094
5.4.1 Array.isArray()	095
5.4.2 Array.of()	095
5.4.3 Array.from()	095
5.5 实例方法	099
5.5.1 concat()	099
5.5.2 copyWithin()	099
5.5.3 keys()、values() 和 entries()	100
5.5.4 forEach() 和 map()	100
5.5.5 every() 和 some()	101
5.5.6 filter()	101
5.5.7 fill()	102
5.5.8 find() 和 findIndex()	102
5.5.9 includes()	102
5.5.10 indexOf() 和 lastIndexOf()	103
5.5.11 join() 和 splice()	103
5.5.12 push()、pop()、unshift() 和 shift()	103
5.5.13 reduce() 和 reduceRight()	104
5.5.14 reverse()	104
5.5.15 slice()	104
5.5.16 sort()	104
5.5.17 toString()	105
5.5.18 toLocaleString()	105
第6章 对象	106
6.1 定义	107
6.1.1 定义对象的属性	107
6.1.2 定义对象的方法	108
6.1.3 getter 和 setter	108
6.2 属性	109
6.2.1 原型及原型链	109
6.2.2 更好的类型检测	110
6.2.3 构造函数	111
6.3 方法	112
6.3.1 Object.getPrototypeOf() 和 Object.setPrototypeOf()	112
6.3.2 Object.create()	112
6.3.3 Object.assign()	112
6.3.4 Object.defineProperty() 和 Object.getOwnPropertyDescriptor()	113
6.3.5 Object.defineProperties()和Object.getOwnPropertyDescriptors()	114
6.3.6 Object.keys()、Object.values() 和 Object.entries()	114
6.3.7 Object.freeze() 和 Object.isFrozen()	115
6.3.8 Object.seal() 和 Object.isSealed()	115
6.3.9 Object.preventExtensions() 和 Object.isExtensible()	116
6.3.10 Object.is()	116
6.3.11 Object.getOwnPropertyNames()	116
6.3.12 Object.getOwnPropertySymbols()	117
第7章 类	118
7.1 定义	119
7.2 constructor	119
7.2.1 实例化	119
7.2.2 类的方法	120
7.2.3 this 指向	120
7.2.4 constructor 属性	121
7.3 继承	122
7.4 静态方法	123
第8章 JSON	125
8.1 简介	126
8.2 JSON的解析	126
8.3 JSON的序列化	129
第9章 BOM	132
9.1 window	133
9.1.1 setTimeout	133
9.1.2 setInterval	133
9.1.3 定时器的问题	134
9.2 history	134
9.2.1 history	134
9.2.2 ajax 的前进后退	135
9.3 location	137
9.3.1 assign() 和 replace()	138
9.3.2 reload()	138
9.3.3 属性	138
9.4 navigator	139
第10章 DOM	140
10.1 DOM 简介	141
10.1.1 节点	141
10.1.2 节点类型	141
10.2 节点查找	142
10.2.1 获取单个节点 Node	142
10.2.2 获取节点集合 NodeList	143
10.3 节点操作	146
10.3.1 创建节点	146
10.3.2 新增节点	147
10.3.3 删除节点	148
10.3.4 修改节点	149
10.4 属性操作	149
10.4.1 getAttribute()	149
10.4.2 setAttribute()	150
10.4.3 点符号	150
10.4.4 classList 属性	150
10.5 内容操作	151
10.6 样式操作	152
10.6.1 getComputedStyle()	152
10.6.2 设置CSS样式	152
第11章 事件	153
11.1 事件处理	154
11.1.1 addEventListener()	154
11.1.2 removeEventListener()	155
11.2 事件流	156
11.3 事件对象与事件类型	157
11.3.1 阻止默认行为	159
11.3.2 阻止事件冒泡	159
11.3.3 事件委托	160
11.4 自定义事件	161
第12章 Ajax	163
12.1 Ajax 简介	164
12.1.1 XMLHttpRequest	164
12.1.2 Fetch	167
12.2 HTTP	168
12.2.1 客户端、服务端	168
12.2.2 代理服务器	168
12.2.3 HTTP是无状态,有会话的	168
12.2.4 HTTP 流	169
12.2.5 http1.0的问题	170
12.4 跨域	171
12.4.1 浏览器的同源策略	171
12.4.2 jsonp	171
12.4.3 img ping	171
12.4.4 window.name	172
12.4.5 postMessage	173
12.4.6 CORS	174
第13章 模块和构建工具	175
13.1 模块	176
13.1.1 CommonJS	176
13.1.2 AMD	177
13.1.3 CMD	177
13.1.4 UMD	178
13.2 ES6中的模块	178
13.2.1 export	178
13.2.2 import	179
13.2.3 导入、导出时的重命名	179
13.3 构建工具	180
13.3.1 npm 的使用	180
13.3.2 npm 发布包	181
第14章 客户端存储	184
14.1 cookie	185
14.1.1 什么是 cookie	185
14.1.2 有效期和作用域	185
14.1.3 关于 session	186
14.1.4 关于 token	186
14.2 本地存储	186
14.2.1 localStorage	187
14.2.2 .和 [ ] 操作	188
14.2.3 sessionStorage	188
14.3 IndexedDB	188
第15章 性能优化	191
15.1 减少请求数	192
15.1.1 合并代码	192
15.1.2 CSS Sprite	193
15.1.3 data url	193
15.2 减少代码体积	194
15.3 缓存文件	196
15.3.1 浏览器缓存	196
15.3.2 客户端缓存	197
15.4 使用内容分发网络 CDN	197
15.6 延迟加载	197
15.6.1 实现	198
15.6.2 完整代码	198
15.7 避免重定向	199
15.8 服务端gzip	199
15.8.1 什么是 gzip	199
15.8.2 gzip 压缩原理	200
第16章 类库和框架	201
16.1 预处理器	202
16.2 辅助库	202
16.2.1 jQuery	202
16.2.2 axios	203
16.2.3 Underscore	203
16.2.4 lodash	204
16.2.5 Moment.js	204
16.3 框架	205
16.3.1 Angular	205
16.3.2 React	205
16.3.3 Vue.js	205
附录 A Canvas	206
附录 B 前端中的 SEO	209
B.1 robots.txt	209
B.2 title	209
B.3 meta	210
B.4 其他 HTML 标签	210
B.5 结构化数据标记	210
附录 C 编程风格	212
C.1 减少全局变量污染	212
C.2 避免使用 var	212
C.3 使用字面量	212
C.4 字符串	213
C.5 解构	213
C.6 函数	213
C.7 模块	214
C.8 其他	214