第1章 走进JavaScript世界 1
1.1 JavaScript是什么 1
1.2 JavaScript的历史 2
1.3 JavaScript与Java无关 3
1.4 JavaScript的应用场景 4
1.5 JavaScript的不同实现 5
1.5.1 ECMAScript 5
1.5.2 BOM 6
1.5.3 DOM 6
1.5.4 Node.js 6
1.6 JavaScript的重要版本 6
1.7 编写第一行JavaScript 代码 8
1.7.1 编程工具 8
1.7.2 代码编写位置 9
1.7.3 代码注释 11
1.7.4 空格与分号 12
1.7.5 程序调试 12
1.8 严格模式 13
1.9 本章小结 13
第2章 变量 14
2.1 var声明 14
2.1.1 var声明作用域 16
2.1.2 var声明提升 17
2.2 let声明 19
2.2.1 let声明的块作用域 20
2.2.2 暂时性死区 21
2.3 const声明 21
2.4 变量声明的最佳实践 22
2.5 变量的命名规范 22
2.6 案例:如何交换两个变量的值 24
2.7 本章小结 26
第3章 基本数据类型 27
3.1 使用typeof检测数据类型 27
3.2 Number类型 28
3.2.1 认识Number类型 28
3.2.2 Infinity和-Infinity 28
3.2.3 多种进制 29
3.2.4 特殊数值NaN 31
3.3 String类型 31
3.3.1 认识String类型 31
3.3.2 模板字符串 32
3.3.3 特殊字符 33
3.4 Boolean类型 34
3.5 Undefined类型 34
3.6 Null类型 35
3.7 BigInt类型 35
3.8 显式类型转换 36
3.8.1 将其他类型值转换为Number类型 36
3.8.2 将其他类型值转换为String类型 36
3.8.3 将其他类型值转换为Boolean类型 37
3.9 隐式类型转换 37
3.10 手动类型转换 38
3.11 案例:小小加法计算器 38
3.12 本章小结 40
第4章 运算符和表达式 41
4.1 算术运算符 41
4.1.1 加、减法运算符 42
4.1.2 乘、除法运算符 42
4.1.3 取余运算符 43
4.1.4 案例:计算一个三位数各个数位上的数字的总和 43
4.2 赋值运算符 44
4.2.1 二元赋值运算符 45
4.2.2 一元赋值运算符 46
4.3 比较运算符 47
4.3.1 大于运算符和小于运算符 47
4.3.2 等于运算符和不等于运算符 48
4.4 逻辑运算符 49
4.4.1 非运算 49
4.4.2 且运算 49
4.4.3 或运算 50
4.4.4 短路现象 51
4.4.5 案例:数轴上的范围表示 51
4.5 条件运算符 52
4.6 其他运算符 52
4.7 运算符优先级 53
4.7.1 数学运算符的优先级 53
4.7.2 逻辑运算符的优先级 54
4.7.3 综合运算优先级 54
4.8 本章小结 55
第5章 语句 56
5.1 条件语句之if 语句 56
5.1.1 单分支if语句和双分支if语句 57
5.1.2 多分支if语句 59
5.1.3 if语句的嵌套 61
5.1.4 案例:考试成绩分档 62
5.2 条件语句之switch 语句 64
5.2.1 基本语法 65
5.2.2 案例:判断某月份有多少天 66
5.3 循环语句之for循环 69
5.3.1 基本语法 69
5.3.2 案例:使用for循环输出年份和年龄 72
5.4 循环语句之while循环 72
5.4.1 基本语法 72
5.4.2 案例:使用while循环输出年份和年龄 74
5.5 循环语句之do…while循环 75
5.5.1 基本语法 75
5.5.2 案例:生成不都为0的随机数 76
5.6 跳转 76
5.6.1 break 76
5.6.2 continue 77
5.6.3 区分while和do…while 77
5.7 循环嵌套 78
5.8 本章小结 80
第6章 函数(上) 81
6.1 函数的定义与调用 82
6.2 函数封装练习 85
6.3 函数参数相关 87
6.3.1 参数默认值 87
6.3.2 剩余参数 88
6.4 作用域 90
6.5 作用域链 92
6.6 箭头函数 93
6.6.1 箭头函数的语法使用 93
6.6.2 箭头函数的特性 94
6.7 本章小结 96
第7章 对象 97
7.1 创建对象 97
7.1.1 new Object() 98
7.1.2 对象字面量 98
7.1.3 new自定义构造函数 99
7.1.4 Object.create() 101
7.2 ES6新增对象书写格式 102
7.2.1 属性和方法的简写 102
7.2.2 属性名表达式 103
7.3 操作对象的属性和方法 103
7.3.1 点操作符和中括号操作符 103
7.3.2 新增属性 105
7.3.3 修改属性 106
7.3.4 读取属性 106
7.3.5 删除属性 107
7.3.6 定义getter和setter的属性 107
7.4 原型与原型链 109
7.4.1 原型 109
7.4.2 原型链 111
7.4.3 instanceof原理分析 113
7.5 内置引用类型和对象 114
7.5.1 String类型 115
7.5.2 Number类型 120
7.5.3 Boolean类型 121
7.5.4 Date类型 121
7.5.5 RegExp类型 124
7.5.6 Math对象 127
7.6 本章小结 128
第8章 函数(下) 129
8.1 IIFE 129
8.2 arguments 131
8.2.1 伪(类)数组 131
8.2.2 arguments的使用 131
8.3 回调函数 132
8.3.1 内置的回调函数 132
8.3.2 自定义回调函数 133
8.4 函数递归 133
8.5 函数中的this 135
8.6 函数也是对象 138
8.7 函数对象的方法 139
8.7.1 call()方法 139
8.7.2 apply()方法 139
8.7.3 bind()方法 140
8.7.4 案例:伪数组转数组 141
8.8 预解析 141
8.8.1 变量提升与函数提升 141
8.8.2 执行上下文与执行上下文栈 143
8.9 闭包 147
8.10 内存管理 150
8.10.1 内存的生命周期 150
8.10.2 垃圾回收 151
8.10.3 内存泄漏与内存溢出 152
8.11 本章小结 154
第9章 数组 155
9.1 数组的概念 155
9.2 数组的基本操作 156
9.2.1 创建数组 156
9.2.2 添加元素 157
9.2.3 遍历数组 159
9.2.4 更新元素 160
9.2.5 删除元素 160
9.3 数组的其他常用方法 162
9.3.1 concat()方法和slice()方法 162
9.3.2 reverse()方法和sort()方法 163
9.3.3 find()方法和findIndex()方法 164
9.3.4 map()方法 165
9.3.5 reduce()方法 165
9.3.6 every()方法和some()方法 166
9.3.7 splice()方法 167
9.4 多维数组 168
9.5 实战案例:冒泡排序 169
9.6 Array的静态方法 170
9.6.1 Array.isArray()方法 170
9.6.2 Array.from()方法 171
9.6.3 Array.of()方法 171
9.7 实战案例:取出数组的最大值和最小值 171
9.8 本章小结 172
第10章 BOM 173
10.1 window对象 173
10.1.1 全局作用域 173
10.1.2 访问客户端对象 174
10.1.3 使用系统对话框 174
10.1.4 打开窗口和关闭窗口 176
10.1.5 超时调用和间歇调用 177
10.2 navigator对象 183
10.2.1 navigator概念 183
10.2.2 浏览器检测方法 184
10.2.3 操作系统检测方法 185
10.3 location对象 185
10.4 history对象 187
10.5 本章小结 188
第11章 DOM 189
11.1 DOM的版本 189
11.2 节点 190
11.2.1 节点关系 190
11.2.2 节点种类 191
11.2.3 节点类型、名称、值 192
11.3 节点的操作之访问节点 194
11.3.1 获取元素基础方法 194
11.3.2 selectors API 197
11.3.3 selectors API和传统方法的比较 198
11.3.4 节点关系中访问元素节点的方法 199
11.3.5 其他获取节点方法 200
11.4 节点的操作之增、删、改操作 200
11.4.1 创建节点 200
11.4.2 创建文本节点 201
11.4.3 插入节点 201
11.4.4 复制节点 202
11.4.5 删除节点 203
11.4.6 替换节点 204
11.5 属性节点 204
11.5.1 属性分类 205
11.5.2 传统属性操作 205
11.5.3 HTML5自定义属性操作 206
11.5.4 案例:字号变大 207
11.6 文本节点 209
11.6.1 innerHTML和innerText 209
11.6.2 textContent 210
11.7 脚本化CSS 211
11.7.1 元素大小 211
11.7.2 元素位置 212
11.7.3 设置与获取元素样式 213
11.7.4 元素的类名操作 214
11.8 文档碎片节点 215
11.9 本章小结 216
第12章 DOM编程之事件 217
12.1 DOM事件流 217
12.1.1 事件冒泡 218
12.1.2 事件捕获 220
12.1.3 标准(混合)型 221
12.2 绑定事件监听 223
12.2.1 HTML事件监听绑定 223
12.2.2 DOM0事件监听绑定 224
12.2.3 DOM2与DOM3事件监听绑定 224
12.2.4 IE事件监听绑定 226
12.3 JavaScript常用事件 226
12.3.1 获取焦点和失去焦点 226
12.3.2 点击事件 228
12.3.3 键盘事件 230
12.3.4 表单事件 231
12.3.5 鼠标事件 233
12.3.6 滚动条事件 239
12.3.7 加载事件 240
12.3.8 滚轮事件 242
12.4 event对象 243
12.5 事件的三个特别处理 244
12.5.1 停止事件冒泡 244
12.5.2 阻止事件默认行为 246
12.5.3 事件委托 246
12.6 本章小结 249
第13章 AJAX 250
13.1 相关理解 250
13.2 JSON 251
13.2.1 JSON数据格式 252
13.2.2 JSON对象 253
13.3 XMLHttpRequest对象 254
13.3.1 XMLHttpRequest 对象介绍 254
13.3.2 XMLHttpRequest level2 254
13.3.3 发送请求相关操作 255
13.3.4 处理响应相关操作 258
13.3.5 进度事件 260
13.3.6 请求超时和终止请求 261
13.3.7 封装ajax()请求函数 262
13.4 跨域 264
13.4.1 JSONP解决跨域问题 264
13.4.2 CORS解决跨域问题 265
13.5 本章小结 265
第14章 异步编程 266
14.1 相关理解 266
14.1.1 单线程与多线程 266
14.1.2 同步与异步 267
14.2 传统异步回调 269
14.2.1 理解 269
14.2.2 回调地狱问题 270
14.3 异步Promise 271
14.3.1 理解 271
14.3.2 使用Promise 271
14.3.3 Promise的链式调用 273
14.3.4 Promise的静态方法 275
14.4 事件循环机制 277
14.4.1 图解事件循环的基本流程 278
14.4.2 宏队列与微队列 279
14.5 本章小结 282
第15章 ES6的其他常用新特性 283
15.1 ES6学习指南 283
15.2 解构赋值 285
15.2.1 对象解构 285
15.2.2 数组解构 287
15.3 对象的扩展 288
15.3.1 Object.is() 288
15.3.2 Object.assign() 289
15.4 Symbol类型 289
15.5 迭代器与for…of循环 291
15.6 扩展运算符 293
15.7 Set结构与Map结构 296
15.7.1 Set 296
15.7.2 Map 298
15.8 Proxy与Reflect 300
15.9 本章小结 303