第1章 JavaScript概述 1
1.1 JavaScript发展历史 2
1.1.1 第一个网页脚本语言 2
1.1.2 Netscape发明了JavaScript 2
1.1.3 三足鼎立 2
1.1.4 ECMAScript诞生 3
1.2 JavaScript版本 3
1.3 ECMAScript概述 4
1.3.1 ECMAScript和JavaScript的关系 4
1.3.2 ECMAScript发展历史 4
1.4 JavaScript实现 5
1.4.1 JavaScript核心 5
1.4.2 文档对象模型 6
1.4.3 浏览器对象模型 7
1.5 JavaScript开发工具 8
1.5.1 JavaScript编辑器 8
1.5.2 JavaScript测试和调试 8
第2章 在网页中使用JavaScript 11
2.1 使用<script>标签 12
2.1.1 编写第一个JavaScript程序 12
2.1.2 脚本位置 15
2.1.3 延迟执行脚本 16
2.1.4 异步响应脚本 16
2.1.5 在XHTML中使用JavaScript脚本 17
2.1.6 兼容不支持JavaScript的浏览器 19
2.2 比较嵌入代码与链接脚本 19
2.3 使用<noscript>标签 19
2.4 JavaScript执行顺序 20
2.4.1 正常执行顺序 20
2.4.2 预编译提前 21
2.4.3 代码块的执行顺序 22
2.4.4 事件响应顺序 23
2.4.5 动态输出脚本字符串 24
2.5 浏览器与JavaScript 25
2.5.1 浏览器内核 25
2.5.2 浏览器错误报告 25
2.6 JavaScript错误处理 29
2.6.1 使用try-catch 29
2.6.2 使用finally 30
2.6.3 错误类型 30
2.6.4 抛出错误 32
2.6.5 案例:设计抛出错误时机 33
2.6.6 错误事件 34
2.6.7 错误类型 35
2.6.8 案例:记录错误 36
2.7 JavaScript代码调试 37
2.7.1 使用控制台 37
2.7.2 显示错误信息 38
2.7.3 抛出错误 40
2.7.4 IE错误 40
第3章 JavaScript基本语法 44
3.1 词法基础 45
3.1.1 字符编码 45
3.1.2 大小写敏感 46
3.1.3 标识符 47
3.1.4 直接量 47
3.1.5 关键字和保留字 47
3.1.6 分隔符 48
3.1.7 注释 50
3.1.8 转义序列 51
3.2 句法基础 51
3.2.1 认识词、句和段 51
3.2.2 分号 53
3.2.3 大括号 54
第4章 数据、类型和变量 56
4.1 JavaScript数据类型概述 57
4.1.1 JavaScript数据类型的特点 57
4.1.2 JavaScript的基本数据类型 57
4.1.3 值类型和引用类型 58
4.2 值类型数据 60
4.2.1 数值 60
4.2.2 字符串 63
4.2.3 布尔值 65
4.2.4 Null 65
4.2.5 Undefined 66
4.3 引用型数据 67
4.3.1 数组 67
4.3.2 对象 69
4.3.3 函数 71
4.4 数据类型检测 74
4.4.1 使用typeof 74
4.4.2 使用constructor 74
4.4.3 案例:在框架窗口检测数组类型 75
4.4.4 案例:设计完善的数据类型检测工具 76
4.5 数据类型转换 78
4.5.1 值类型转换 78
4.5.2 引用型转换 79
4.5.3 转换为字符串 81
4.5.4 案例:转换数字模式 83
4.5.5 案例:设置数字转换为字符串的小数位数 83
4.5.6 转换为数字 84
4.5.7 转换为布尔值 86
4.5.8 案例:装箱和拆箱 87
4.5.9 案例:强制转换 88
4.6 使用变量 89
4.6.1 声明变量 89
4.6.2 变量的作用域 91
4.6.3 变量的作用域链 94
4.6.4 变量回收 95
4.6.5 案例:变量污染 95
4.7 案例实战 96
4.7.1 代码题 96
4.7.2 编程题 100
第5章 运算符和表达式 102
5.1 运算符和表达式概述 103
5.1.1 认识运算符 103
5.1.2 使用运算符 106
5.1.3 认识表达式 107
5.1.4 案例:优化表达式 107
5.2 位运算符 109
5.2.1 位运算概述 109
5.2.2 逻辑位运算 111
5.2.3 移位运算 113
5.3 算术运算符 114
5.3.1 加法运算 114
5.3.2 减法运算 115
5.3.3 乘法运算 116
5.3.4 除法运算 116
5.3.5 余数运算 116
5.3.6 取反运算 117
5.3.7 递增和递减 117
5.4 逻辑运算符 118
5.4.1 逻辑与运算符 118
5.4.2 逻辑或运算符 120
5.4.3 逻辑非运算符 121
5.4.4 案例:逻辑运算训练 121
5.5 关系运算符 123
5.5.1 大小比较 123
5.5.2 案例:包含检测 124
5.5.3 案例:等值检测 124
5.6 赋值运算符 126
5.7 对象操作运算符 128
5.7.1 new运算符 128
5.7.2 delete运算符 129
5.7.3 中括号和点号运算符 130
5.7.4 小括号运算符 133
5.8 其他运算符 133
5.8.1 条件运算符 133
5.8.2 逗号运算符 134
5.8.3 void运算符 135
5.8.4 typeof运算符 136
5.9 案例实战 136
5.9.1 表达式计算 137
5.9.2 表达式描述 138
5.9.3 编程题 138
第6章 语句和结构 139
6.1 语句概述 140
6.2 简单语句 142
6.2.1 表达式语句 142
6.2.2 复合语句 143
6.2.3 声明语句 144
6.2.4 空语句 145
6.3 分支结构 146
6.3.1 if语句 146
6.3.2 条件嵌套 147
6.3.3 案例:优化条件结构 148
6.3.4 案例:条件误用 149
6.3.5 switch语句 150
6.3.6 default从句 152
6.3.7 案例:比较if和switch 154
6.3.8 案例:优化分支结构 155
6.4 循环结构 157
6.4.1 while语句 157
6.4.2 do/while语句 158
6.4.3 for语句 159
6.4.4 for/in语句 160
6.4.5 案例:使用for/in 161
6.4.6 案例:比较while和for 163
6.4.7 案例:优化循环结构 165
6.5 结构跳转 167
6.5.1 标签语句 167
6.5.2 break语句 167
6.5.3 continue语句 170
6.6 异常处理 171
6.6.1 异常概述 171
6.6.2 throw语句 172
6.6.3 try/catch/finally语句 172
6.6.4 案例:改变作用域链 174
6.7 函数结构 175
6.7.1 function语句 175
6.7.2 return语句 176
6.8 with语句 177
6.9 案例实战 178
6.9.1 编程题 178
6.9.2 提升条件检测性能 179
6.9.3 提升循环迭代性能 180
6.9.4 设计杨辉三角 182
第7章 操作字符串 185
7.1 定义字符串 186
7.1.1 字符串直接量 186
7.1.2 构造字符串 186
7.1.3 使用字符编码 187
7.2 使用字符串 188
7.2.1 案例:计算字符串长度 188
7.2.2 案例:连接字符串 190
7.2.3 案例:查找字符串 190
7.2.4 案例:截取子字符串 193
7.2.5 案例:编辑字符串 195
7.2.6 案例:灵活使用replace()方法 197
7.2.7 案例:比较字符串 199
7.2.8 案例:把字符串转换为数组 199
7.2.9 案例:字符串的类型和值 200
7.2.10 案例:格式化字符串 201
7.3 案例实战 202
7.3.1 修剪字符串 202
7.3.2 检测特殊字符 204
7.3.3 优化字符串连接 205
7.4 加密和解密 206
7.4.1 JavaScript编码和解码 206
7.4.2 案例:Unicode编码 208
7.4.3 案例:Unicode解码 209
7.4.4 综合实战:自定义加密和解密方法 210
第8章 使用正则表达式 212
8.1 认识正则表达式 213
8.2 定义正则表达式 213
8.2.1 构造正则表达式 213
8.2.2 正则表达式直接量 215
8.3 字符匹配 216
8.3.1 认识普通字符和元字符 216
8.3.2 字符直接量 216
8.3.3 简单字符类 217
8.3.4 反义字符类 218
8.3.5 字符范围类 219
8.3.6 预定义字符类 220
8.4 重复匹配 220
8.4.1 简单重复性匹配 221
8.4.2 贪婪匹配 222
8.4.3 惰性匹配 224
8.4.4 支配匹配 225
8.5 高级匹配 225
8.5.1 分组 225
8.5.2 案例:分组应用 227
8.5.3 引用 228
8.5.4 案例:非引用型分组 229
8.5.5 选择 229
8.5.6 声明 231
8.5.7 边界 232
8.5.8 锚记 233
8.5.9 标志 233
8.6 使用RegExp对象 234
8.6.1 实例属性 234
8.6.2 静态属性 235
8.6.3 案例应用 237
8.7 综合案例:设计表单验证 239
第9章 操作数组 245
9.1 定义数组 246
9.1.1 构造数组 246
9.1.2 数组直接量 246
9.2 使用数组 247
9.2.1 存取数组元素 247
9.2.2 数组长度 248
9.2.3 案例:比较对象与数组 249
9.2.4 案例:定义多维数组 251
9.3 数组的应用 252
9.3.1 案例:检索数组 252
9.3.2 案例:添删元素 253
9.3.3 案例:操作子数组 255
9.3.4 案例:数组排序 257
9.3.5 案例:使用数组排序函数 258
9.3.6 案例:数组与字符串转换 260
9.4 案例实战 261
9.4.1 快速交换 261
9.4.2 数组下标 262
9.4.3 扩展数组方法 263
9.4.4 设计迭代器 265
9.4.5 使用迭代器 266
9.4.6 使用数组维度 268
9.5 综合实践:排序算法设计 269
9.5.1 插入排序 269
9.5.2 二分插入排序 270
9.5.3 选择排序 270
9.5.4 冒泡排序 271
9.5.5 快速排序 272
9.5.6 计数排序 272
第10章 使用对象 274
10.1 认识对象 275
10.2 对象分类 275
10.2.1 原生对象 275
10.2.2 宿主对象 276
10.3 对象基本操作 276
10.3.1 创建对象 276
10.3.2 引用对象 277
10.3.3 销毁对象 277
10.4 属性基本操作 278
10.4.1 定义属性 278
10.4.2 访问属性 279
10.4.3 赋值和删除属性 279
10.4.4 对象方法 280
10.5 原生对象类型 282
10.5.1 构造对象 282
10.5.2 实例对象 283
10.5.3 原型对象 284
10.6 使用构造器 287
10.7 使用对象基本方法 288
10.7.1 案例:重写toString 289
10.7.2 案例:重写valueOf 290
10.7.3 案例:检测私有属性 291
10.7.4 案例:检测枚举属性 292
10.7.5 案例:检测原型对象 293
10.8 使用原生对象 294
10.8.1 Global对象 294
10.8.2 Math对象 294
10.8.3 Date对象 296
10.9 综合案例:设计计算器 298
第11章 使用函数 302
11.1 认识函数 303
11.1.1 函数是代码块 303
11.1.2 函数是数据 303
11.1.3 函数是对象 304
11.2 定义函数 304
11.2.1 构造函数 305
11.2.2 函数直接量 306
11.2.3 定义嵌套函数 307
11.3 案例:优化函数定义 307
11.3.1 函数作用域 308
11.3.2 解析机制 309
11.3.3 兼容性和灵活性 309
11.4 使用函数 310
11.4.1 函数返回值 310
11.4.2 调用函数 311
11.4.3 函数生命周期 312
11.4.4 函数作用域 313
11.5 使用参数 314
11.5.1 认识形参和实参 314
11.5.2 使用Arguments对象 315
11.5.3 使用callee回调函数 316
11.5.4 案例实战 317
11.6 使用Function对象 318
11.6.1 获取函数形参个数 318
11.6.2 自定义属性 318
11.6.3 案例:使用call()和apply() 320
11.7 函数解析机制 323
11.7.1 词法作用域与执行作用域 323
11.7.2 执行上下文和作用域链 325
11.7.3 调用对象 327
11.8 函数中的this 328
11.8.1 案例:认识this 328
11.8.2 案例:使用this 333
11.8.3 案例:this安全策略 337
11.8.4 案例:this应用 339
11.9 案例实战 342
11.9.1 函数调用模式 342
11.9.2 扩展函数方法 344
11.9.3 绑定函数 345
11.9.4 链式语法 346
11.9.5 函数节流 347
11.9.6 使用Arguments模拟重载 348
第12章 函数式编程 350
12.1 函数式编程概述 351
12.1.1 函数是第一型 351
12.1.2 函数是运算元 352
12.1.3 函数是数据闭包 352
12.2 表达式运算 353
12.2.1 连续运算 353
12.2.2 把命令转换为表达式 355
12.2.3 表达式中的函数 356
12.3 递归运算 358
12.3.1 认识递归 358
12.3.2 案例:Hanoi(汉诺)塔算法 359
12.3.3 案例:尾递归算法 361
12.3.4 案例:Fibonacci(斐波那契)数列 363
12.3.5 递归算法的优化 364
12.4 闭包函数 366
12.4.1 认识闭包函数 366
12.4.2 使用闭包 367
12.4.3 闭包标识系统 370
12.4.4 闭包作用域和生命周期 371
12.4.5 案例:比较函数调用和引用 374
12.4.6 案例:比较闭包函数和函数实例 376
12.4.7 案例:比较闭包函数和调用对象 380
12.4.8 案例:保护闭包数据的独立性 381
12.4.9 案例:定义构造函数闭包 383
12.4.10 案例:闭包存储器 384
12.4.11 案例:事件处理中闭包应用 386
12.4.12 综合案例:设计折叠面板 389
12.4.13 案例:在循环体和异步回调中慎重使用闭包 391
12.5 案例实战 393
12.5.1 惰性求值 393
12.5.2 记忆 394
12.5.3 套用 396
12.5.4 模块化 397
12.5.5 柯里化 399
12.5.6 高阶函数 400
第13章 面向对象编程 402
13.1 认识类 403
13.2 定义类 404
13.2.1 案例:工厂模式 404
13.2.2 案例:构造函数模式 405
13.2.3 案例:原型模式 406
13.2.4 案例:构造函数原型模式 407
13.2.5 案例:动态原型模式 408
13.3 接口 409
13.3.1 认识接口 409
13.3.2 定义接口 410
13.3.3 使用建议 412
13.4 原型模型 413
13.4.1 认识prototype 413
13.4.2 定义原型 414
13.4.3 案例:原型属性和本地属性 416
13.4.4 案例:应用原型 418
13.4.5 认识原型域和原型域链 421
13.4.6 原型副作用 423
13.5 继承 423
13.5.1 认识JavaScript继承机制 424
13.5.2 原型继承 425
13.5.3 类继承 426
13.5.4 案例:封装类继承模式 430
13.5.5 实例继承 431
13.5.6 复制继承 432
13.5.7 克隆继承 433
13.5.8 混合继承 434
13.5.9 多重继承 435
13.5.10 掺元类 436
13.6 封装 438
13.6.1 被动封装 438
13.6.2 主动封装 440
13.6.3 静态方法 442
13.7 多态 444
13.7.1 案例:方法重载和覆盖 444
13.7.2 案例:类的多态 447
13.8 构造和析构 448
13.8.1 案例:构造函数 448
13.8.2 案例:析构函数 450
13.9 案例实战 450
13.9.1 惰性实例化 451
13.9.2 安全构造对象 452
13.9.3 设计超类和子类 454
13.9.4 设计元类 455
13.9.5 分支函数 457
13.9.6 惰性载入函数 458
第14章 BOM 461
14.1 认识BOM 462
14.2 使用Window对象 463
14.2.1 全局作用域 464
14.2.2 Window对象生命周期 464
14.2.3 人机交互接口 464
14.2.4 案例:控制弹出窗口 466
14.2.5 案例:框架集通信 467
14.3 使用Navigator对象 469
14.3.1 了解浏览器检测方法 469
14.3.2 案例:检测浏览器类型和版本 470
14.3.3 案例:检测客户端操作系统 471
14.4 使用Location和History对象 472
14.4.1 案例:使用Location对象 472
14.4.2 使用History对象 474
14.5 使用Screen对象 475
14.5.1 案例:使用Screen对象控制窗口大小 475
14.5.2 案例:使用Window对象控制窗口大小 475
14.6 使用Document对象 476
14.6.1 认识Document 476
14.6.2 使用0级文档模型操作文档 477
14.6.3 案例:动态生成文档 479
第15章 DOM 481
15.1 认识DOM 482
15.2 使用节点 484
15.2.1 节点类型 484
15.2.2 节点名称和值 486
15.2.3 节点关系 487
15.2.4 案例:访问节点 488
15.2.5 案例:操作节点 491
15.3 使用文档节点 493
15.3.1 访问文档子节点 493
15.3.2 访问文档信息 493
15.3.3 访问文档元素 494
15.3.4 使用HTML5 Document 494
15.4 使用元素节点 495
15.4.1 访问元素 496
15.4.2 案例:遍历元素 497
15.4.3 创建元素 499
15.4.4 案例:复制节点 500
15.4.5 案例:插入节点 501
15.4.6 案例:删除节点 503
15.4.7 案例:替换节点 504
15.5 使用文本节点 505
15.5.1 访问文本节点 506
15.5.2 创建文本节点 507
15.5.3 操作文本节点 507
15.5.4 读取HTML字符串 508
15.5.5 案例:插入HTML字符串 508
15.5.6 案例:替换HTML字符串 510
15.5.7 案例:插入文本 511
15.6 使用文档片段节点 513
15.7 使用属性节点 514
15.7.1 访问属性节点 514
15.7.2 案例:读取属性值 516
15.7.3 案例:设置属性值 517
15.7.4 案例:删除属性 518
15.7.5 案例:使用类选择器 519
15.7.6 自定义属性 520
15.8 使用范围 521
15.8.1 创建范围 521
15.8.2 案例:选择范围 522
15.8.3 案例:设置范围 525
15.8.4 案例:操作范围内容 527
15.8.5 案例:插入范围内容 530
15.9 使用CSS选择器 531
第16章 事件处理 533
16.1 事件概述 534
16.1.1 事件模型分类 534
16.1.2 事件流 534
16.1.3 事件类型 537
16.2 基本事件模型 538
16.2.1 基本事件类型 538
16.2.2 绑定事件 539
16.2.3 事件处理函数的返回值 540
16.2.4 事件处理函数的参数 540
16.2.5 事件处理函数中的this 541
16.3 标准事件模型 542
16.3.1 事件传播 542
16.3.2 注册事件 543
16.3.3 注销事件 544
16.3.4 事件类型 545
16.3.5 Event对象 546
16.4 IE事件模型 547
16.4.1 注册和销毁事件 547
16.4.2 Event对象 550
16.5 鼠标事件开发 551
16.5.1 鼠标点击 551
16.5.2 案例:鼠标移动 552
16.5.3 案例:鼠标经过 553
16.5.4 案例:鼠标来源 554
16.5.5 案例:鼠标定位 555
16.5.6 鼠标按键 558
16.6 键盘事件开发 558
16.6.1 认识键盘事件的属性 559
16.6.2 键盘事件响应顺序 561
16.7 页面事件开发 562
16.7.1 页面初始化 562
16.7.2 结构初始化 564
16.7.3 页面卸载 566
16.7.4 窗口重置 566
16.7.5 页面滚动 567
16.7.6 错误处理 568
16.8 UI事件开发 568
16.9 表单事件开发 569
16.9.1 选择文本 569
16.9.2 监测值变化 569
16.9.3 提交表单 570
16.9.4 重置表单 571
16.10 案例实战:自定义事件 572
16.10.1 设计弹出对话框 572
16.10.2 设计遮罩层 573
16.10.3 定义事件雏形 575
16.10.4 设计事件触发模型 575
16.10.5 应用事件模型 577
第17章 脚本化CSS 581
17.1 脚本化CSS概述 582
17.1.1 认识CSS脚本属性 582
17.1.2 CSS样式模型概述 586
17.2 操作行内样式 588
17.2.1 CSS脚本属性名规范 588
17.2.2 使用style对象 589
17.3 操作样式表 595
17.3.1 使用styleSheets对象 595
17.3.2 访问样式表中的样式 596
17.3.3 读取样式的选择符 598
17.3.4 编辑样式 599
17.3.5 添加样式 600
17.3.6 访问显示样式 601
17.4 控制大小 604
17.4.1 案例:从样式表中读取宽度和高度 604
17.4.2 案例:把样式属性值转换为实际值 606
17.4.3 案例:使用offsetWidth和offsetHeight 607
17.4.4 案例:复杂环境下的元素尺寸 610
17.4.5 案例:可视区域尺寸 612
17.4.6 案例:浏览器窗口尺寸 613
17.5 位移和定位 614
17.5.1 案例:获取窗口位置 614
17.5.2 案例:获取相对包含框的位置 617
17.5.3 案例:获取定位包含框的位置 617
17.5.4 案例:设置元素的偏移位置 618
17.5.5 案例:设置元素的相对位置 618
17.5.6 案例:获取鼠标指针的页面位置 619
17.5.7 案例:获取鼠标指针在元素内的位置 620
17.5.8 案例:获取页面滚动条的位置 622
17.5.9 案例:设置页面滚动条的位置 622
17.6 显示和隐藏 623
17.6.1 案例:可见性 623
17.6.2 案例:透明度 624
17.7 设计动画 625
17.7.1 定时器 625
17.7.2 案例:滑动 628
17.7.3 案例:渐隐渐显 629
第18章 HTML5动画设计 630
18.1 HTML5 canvas概述 631
18.1.1 在页面中添加canvas元素 631
18.1.2 Canvas如何绘制图形 632
18.1.3 认识Canvas坐标 633
18.1.4 何时不用Canvas 633
18.1.5 如果浏览器不支持Canvas 633
18.1.6 检测浏览器支持 633
18.2 绘制基本图形 634
18.2.1 绘制直线 634
18.2.2 绘制矩形 635
18.2.3 绘制圆形 636
18.2.4 绘制三角形 638
18.2.5 清空画布 639
18.3 绘制曲线 640
18.3.1 绘制二次方贝塞尔曲线 640
18.3.2 绘制三次方贝塞尔曲线 641
18.4 变换图形 642
18.4.1 保存与恢复Canvas状态 642
18.4.2 移动坐标空间 643
18.4.3 旋转坐标空间 645
18.4.4 缩放图形 647
18.4.5 矩阵变换 648
18.5 组合和裁切图形 651
18.5.1 组合图形 651
18.5.2 裁切路径 653
18.6 定义颜色和样式 654
18.6.1 应用线型 654
18.6.2 绘制线性渐变 658
18.6.3 绘制径向渐变 659
18.6.4 绘制图案 660
18.6.5 设置图形的透明度 661
18.6.6 创建阴影 663
18.7 绘制文字 664
18.7.1 绘制填充文字 664
18.7.2 设置文字属性 665
18.7.3 绘制轮廓文字 665
18.7.4 测量文字宽度 666
18.8 嵌入图像 667
18.8.1 向Canvas中引入图像 667
18.8.2 改变图像大小 669
18.8.3 创建图像切片 670
第19章 Web存储 672
19.1 Cookie概述 673
19.1.1 认识Cookie 673
19.1.2 Cookie字符串 673
19.2 存取Cookie 674
19.2.1 写入Cookie 674
19.2.2 设置Cookie有效期 674
19.2.3 设置Cookie的域和路径 675
19.2.4 设置Cookie安全传输 676
19.2.5 案例:完善写入Cookie方法 676
19.2.6 读取Cookie信息 677
19.2.7 修改和删除Cookie信息 678
19.2.8 Cookie的局限性及其突破 678
19.3 综合案例:Cookie应用 680
19.3.1 封装Cookie 680
19.3.2 打字游戏 682
19.4 Web Storage概述 684
19.4.1 Cookie存储机制的优缺点 684
19.4.2 为什么要用Web Storage 684
19.4.3 Web Storage的优势和缺点 685
19.4.4 浏览器支持概述 685
19.5 使用Web Storage 686
19.5.1 检查浏览器的支持性 686
19.5.2 设置和获取数据 688
19.5.3 防止数据泄露 689
19.5.4 Web Storage其他用法 689
19.5.5 Web Storage事件监测 690
19.5.6 案例1:设计网页皮肤 691
19.5.7 案例2:跟踪localStorage数据 692
19.5.8 案例3:设计计数器 694
19.5.9 综合案例:Web应用项目实时跟踪 694
19.6 Web SQL数据库 699
19.6.1 Web SQL数据库概述 700
19.6.2 使用Web SQL数据库 700
19.6.3 实例1:创建简单的本地数据库 702
19.6.4 实例2:批量存储本地数据 705
19.6.5 综合案例:Web Storage和Web SQL混合开发 706
第20章 JavaScript通信 714
20.1 HTTP概述 715
20.2 使用隐藏框架 717
20.2.1 认识隐藏框架 718
20.2.2 案例:使用隐藏框架设计异步交互 719
20.2.3 使用iframe 722
20.3 使用JSONP 724
20.3.1 认识<script>标签 724
20.3.2 案例:脚本化script元素 725
20.3.3 案例:传递参数 726
20.3.4 案例:设计响应类型 730
20.4 使用Ajax 735
20.4.1 认识XMLHttpRequest 735
20.4.2 定义XMLHttpRequest对象 736
20.4.3 建立XMLHttpRequest连接 738
20.5 发送请求 739
20.5.1 发送GET请求 739
20.5.2 发送POST请求 740
20.5.3 案例:把数据转换为串行字符串 741
20.6 异步监测 742
20.6.1 跟踪状态 742
20.6.2 中止请求 744
20.7 获取响应 744
20.7.1 XML 745
20.7.2 HTML 746
20.7.3 JavaScript 746
20.7.4 JSON 747
20.7.5 Text 748
20.7.6 获取头部消息 748
20.8 案例实战 749
20.8.1 封装异步交互 749
20.8.2 设计动态响应的Tab面板 750
20.8.3 使用灯标 754
第21章 XML 755
21.1 XML概述 756
21.2 XML文档对象模型 757
21.2.1 认识XML DOM 757
21.2.2 读取XML 759
21.3 在IE中操作XML 760
21.3.1 创建XML DOM对象 760
21.3.2 加载XML数据 761
21.3.3 错误处理 762
21.4 使用DOM2操作XML 763
21.4.1 创建XML DOM对象 763
21.4.2 加载XML数据 764
21.4.3 读取XML数据 764
21.5 使用XPath 766
21.5.1 熟悉XPath基本语法 766
21.5.2 IE中的XPath 768
21.5.3 DOM 3中的XPath 768
21.6 案例实战 770
21.6.1 在网页中显示XML数据 770
21.6.2 异步加载XML数据 772
第22章 JSON 775
22.1 JSON概述 776
22.2 比较JSON与XML 776
22.3 JSON语法 778
22.3.1 简单值 779
22.3.2 对象 780
22.3.3 数组 781
22.4 JSON解析和序列化 781
22.5 案例:优化JSON数据 781
第23章 ECMAScript 5 785
23.1 ECMAScript 5概述 786
23.2 浏览器支持 787
23.3 严格模式 788
23.3.1 启用严格模式 788
23.3.2 严格模式的执行限制 790
23.4 JSON 795
23.4.1 案例:解析JSON 795
23.4.2 案例:序列化JSON 796
23.5 Object 798
23.5.1 创建对象 798
23.5.2 定义属性 800
23.5.3 访问属性 802
23.5.4 配置属性的特性 803
23.5.5 检测属性的特性 804
23.6 Array 804
23.6.1 定位 805
23.6.2 迭代 805
23.6.3 汇总 813
23.7 Function和String 815
第24章 ECMAScript 6 817
24.1 ECMAScript 6概述 818
24.1.1 兼容性 818
24.1.2 使用ECMAScript 6 818
24.2 变量 818
24.2.1 let命令 819
24.2.2 const命令 820
24.2.3 数组解构赋值 820
24.2.4 对象解构赋值 821
24.2.5 案例:解构应用 822
24.3 字符和字符串 823
24.3.1 字符 824
24.3.2 字符串 825
24.3.3 模板字符串 827
24.4 数值 827
24.4.1 进制表示 827
24.4.2 Number方法 827
24.4.3 Math方法 828
24.5 数组 829
24.5.1 转换 829
24.5.2 实例 830
24.5.3 推导 831
24.5.4 监听 832
24.6 对象 832
24.6.1 新增方法 832
24.6.2 原型方法 833
24.6.3 增强语法 833
24.6.4 属性名表达式 834
24.6.5 符号数据 834
24.6.6 代理防护层 836
24.6.7 监听 837
24.7 函数 838
24.7.1 默认值 838
24.7.2 rest参数 840
24.7.3 扩展运算符 840
24.7.4 箭头函数 841
24.8 数据结构 842
24.8.1 Set 842
24.8.2 WeakSet 843
24.8.3 Map 844
24.8.4 WeakMap 846
24.9 循环遍历 846
24.9.1 遍历器 846
24.9.2 for/of循环 847
24.10 状态机 849
24.10.1 使用Generator函数 849
24.10.2 next()方法 851
24.10.3 异步操作 851
24.10.4 for of循环 853
24.10.5 throw方法 854
24.10.6 yield*语句 855
24.11 预处理 856
24.11.1 基本用法 856
24.11.2 then()方法 858
24.11.3 catch()方法 858
24.11.4 all()和race()方法 859
24.11.5 resolve()和reject()方法 859
24.11.6 asyrnc函数 860
24.12 类和模块 861
24.12.1 类 861
24.12.2 模块 862
第25章 移动定位 865
25.1 位置信息概述 866
25.1.1 为什么要学习Geolocation 866
25.1.2 位置信息表示方式 866
25.1.3 位置信息来源 866
25.1.4 IP定位 867
25.1.5 GPS定位 867
25.1.6 Wi-Fi定位 867
25.1.7 手机定位 868
25.1.8 自定义定位 868
25.2 使用Geolocation API 868
25.2.1 检查浏览器支持性 868
25.2.2 获取当前地理位置 869
25.2.3 监视位置信息 871
25.2.4 停止获取位置信息 871
25.2.5 隐私保护 871
25.2.6 处理位置信息 871
25.2.7 使用position对象 872
25.3 案例实战 873
25.3.1 使用Google地图 873
25.3.2 跟踪行走速度 875
第26章 多线程处理 881
26.1 Web Workers概述 882
26.1.1 认识Web Workers 882
26.1.2 浏览器支持概述 883
26.1.3 熟悉Web Workers成员 883
26.2 使用Web Workers 884
26.2.1 检查浏览器支持性 884
26.2.2 创建Web Workers 884
26.2.3 与Web Workers通信 885
26.2.4 案例:使用Web Workers 887
26.3 案例实战 890
26.3.1 使用多线程实现后台运算 890
26.3.2 在后台过滤值 891
26.3.3 多任务并发处理 893
26.3.4 在多线程之间通信 896
26.3.5 使用线程技术计算Fibonacci数列 898
26.3.6 使用多线程绘图 899
26.4 综合案例:模拟退火算法 903
26.4.1 认识模拟退火算法 903
26.4.2 编写应用主页面 904
26.4.3 编写Worker.is 906
26.4.4 与Web Worker通信 906
第27章 离线应用 910
27.1 HTML5离线应用概述 911
27.1.1 为什么要学习HTML5离线应用 911
27.1.2 浏览器支持概述 912
27.2 HTML5离线应用详解 913
27.2.1 解析manifest文件 913
27.2.2 搭建离线应用程序 916
27.2.3 检查浏览器是否支持 916
27.2.4 离线缓存更新实现 916
27.2.5 JavaScript接口实现 917
27.2.6 离线存储事件监听 919
27.3 案例实战:缓存首页 921
27.4 案例实战:离线编辑内容 924
27.5 案例实战:离线跟踪 928
第28章 案例开发 934
28.1 设计小程序:万年历 935
28.2 设计游戏:俄罗斯方块 942
28.2.1 设计游戏界面 942
28.2.2 设计游戏模型 944
28.2.3 实现游戏功能 946