第1章 JavaScript简介 1
1.1 JavaScript简史 1
1.2 JavaScript实现 2
1.2.1 ECMAScript 3
1.2.2文档对象模型(DOM) 5
1.2.3浏览器对象模型(BOM) 8
1.3 JavaScript版本 8
1.4小结 9
第2章 在HTML中使用JavaScript 10
2.1 〈script〉元素 10
2.1.1标签的位置 12
2.1.2延迟脚本 13
2.1.3异步脚本 13
2.1.4在XHTML中的用法 14
2.1.5不推荐使用的语法 16
2.2嵌入代码与外部文件 16
2.3文档模式 16
2.4 〈noscript〉元素 18
2.5小结 18
第3章 基本概念 19
3.1语法 19
3.1.1区分大小写 19
3.1.2标识符 19
3.1.3注释 20
3.1.4严格模式 20
3.1.5语句 20
3.2关键字和保留字 21
3.3变量 22
3.4数据类型 23
3.4.1 typeof操作符 23
3.4.2 Undefined类型 24
3.4.3 Null类型 25
3.4.4 Boolean类型 26
3.4.5 Number类型 27
3.4.6 String类型 32
3.4.7 Object类型 35
3.5操作符 36
3.5.1一元操作符 36
3.5.2位操作符 39
3.5.3布尔操作符 44
3.5.4乘性操作符 47
3.5.5 加性操作符 48
3.5.6关系操作符 50
3.5.7相等操作符 51
3.5.8条件操作符 53
3.5.9赋值操作符 53
3.5.10逗号操作符 54
3.6语句 54
3.6.1 if语句 54
3.6.2 do-while语句 55
3.6.3 while语句 55
3.6.4 for语句 56
3.6.5 for-in语句 57
3.6.6 label语句 58
3.6.7 break和continue语句 58
3.6.8 with语句 60
3.6.9 switch语句 60
3.7函数 62
3.7.1理解参数 64
3.7.2没有重载 66
3.8小结 67
第4章 变量、作用域和内存问题 68
4.1基本类型和引用类型的值 68
4.1.1动态的属性 68
4.1.2复制变量值 69
4.1.3传递参数 70
4.1.4检测类型 72
4.2执行环境及作用域 73
4.2.1延长作用域链 75
4.2.2没有块级作用域 76
4.3垃圾收集 78
4.3.1标记清除 78
4.3.2引用计数 79
4.3.3性能问题 80
4.3.4管理内存 81
4.4小结 81
第5章 引用类型 83
5.1 Object类型 83
5.2 Array类型 86
5.2.1检测数组 88
5.2.2转换方法 89
5.2.3栈方法 90
5.2.4队列方法 91
5.2.5重排序方法 92
5.2.6操作方法 94
5.2.7位置方法 95
5.2.8迭代方法 96
5.2.9缩小方法 97
5.3 Date类型 98
5.3.1继承的方法 100
5.3.2日期格式化方法 101
5.3.3日期/时间组件方法 102
5.4 RegExp类型 103
5.4.1 RegExp实例属性 105
5.4.2 RegExp实例方法 106
5.4.3 RegExp构造函数属性 107
5.4.4模式的局限性 109
5.5 Function类型 110
5.5.1没有重载(深入理解) 111
5.5.2函数声明与函数表达式 111
5.5.3作为值的函数 112
5.5.4函数内部属性 113
5.5.5函数属性和方法 116
5.6基本包装类型 118
5.6.1 Boolean类型 120
5.6.2 Number类型 120
5.6.3 String类型 122
5.7单体内置对象 130
5.7.1 Global对象 131
5.7.2 Math对象 134
5.8小结 137
第6章 面向对象的程序设计 138
6.1理解对象 138
6.1.1属性类型 139
6.1.2定义多个属性 142
6.1.3读取属性的特性 143
6.2创建对象 144
6.2.1工厂模式 144
6.2.2构造函数模式 144
6.2.3原型模式 147
6.2.4组合使用构造函数模式和原型模式 159
6.2.5动态原型模式 159
6.2.6寄生构造函数模式 160
6.2.7稳妥构造函数模式 161
6.3继承 162
6.3.1原型链 162
6.3.2借用构造函数 167
6.3.3组合继承 168
6.3.4原型式继承 169
6.3.5寄生式继承 171
6.3.6寄生组合式继承 172
6.4小结 174
第7章 函数表达式 175
7.1递归 177
7.2闭包 178
7.2.1闭包与变量 181
7.2.2关于this对象 182
7.2.3内存泄漏 183
7.3模仿块级作用域 184
7.4私有变量 186
7.4.1静态私有变量 188
7.4.2模块模式 189
7.4.3增强的模块模式 191
7.5小结 192
第8章 BOM 193
8.1 window对象 193
8.1.1全局作用域 193
8.1.2窗口关系及框架 194
8.1.3窗口位置 197
8.1.4窗口大小 198
8.1.5导航和打开窗口 199
8.1.6间歇调用和超时调用 203
8.1.7系统对话框 205
8.2 location对象 207
8.2.1查询字符串参数 207
8.2.2位置操作 208
8.3 navigator对象 210
8.3.1检测插件 211
8.3.2注册处理程序 213
8.4 screen对象 214
8.5 history对象 215
8.6小结 216
第9章 客户端检测 217
9.1能力检测 217
9.1.1更可靠的能力检测 218
9.1.2能力检测,不是浏览器检测 220
9.2怪癖检测 220
9.3用户代理检测 221
9.3.1用户代理字符串的历史 222
9.3.2用户代理字符串检测技术 228
9.3.3完整的代码 242
9.3.4使用方法 245
9.4小结 246
第10章 DOM 247
10.1节点层次 247
10.1.1 Node类型 248
10.1.2 Document类型 253
10.1.3 Element类型 261
10.1.4 Text类型 270
10.1.5 Comment类型 273
10.1.6 CDATASection类型 274
10.1.7 DocumentType类型 274
10.1.8 Document Fragment类型 275
10.1.9 Attr类型 276
10.2 DOM操作技术 277
10.2.1动态脚本 277
10.2.2动态样式 279
10.2.3操作表格 281
10.2.4使用NodeList 283
10.3小结 284
第11章 DOM扩展 286
11.1选择符API 286
11.1.1 querySelector ()方法 286
11.1.2 querySelectorAll()方法 287
11.1.3 matchesselector()方法 288
11.2元素遍历 288
11.3 HTML5 289
11.3.1与类相关的扩充 289
11.3.2焦点管理 291
11.3.3 HTMLDocument的变化 292
11.3.4字符集属性 293
11.3.5自定义数据属性 293
11.3.6插入标记 294
11.3.7 scrollIntoview()方法 298
11.4专有扩展 298
11.4.1文档模式 298
11.4.2 children属性 299
11.4.3 contains ()方法 300
11.4.4插入文本 301
11.4.5滚动 303
11.5小结 304
第12章 DOM2和DOM3 305
12.1 DOM变化 305
12.1.1针对XML命名空间的变化 306
12.1.2其他方面的变化 309
12.2样式 312
12.2.1访问元素的样式 313
12.2.2操作样式表 317
12.2.3元素大小 320
12.3遍历 326
12.3.1 NodeIterator 328
12.3.2 Treewalker 330
12.4范围 332
12.4.1 DOM中的范围 332
12.4.2 IE8及更早版本中的范围 340
12.5小结 343
第13章 事件 345
13.1事件流 345
13.1.1事件冒泡 346
13.1.2事件捕获 346
13.1.3 DOM事件流 347
13.2事件处理程序 348
13.2.1 HTML事件处理程序 348
13.2.2 DOM0级事件处理程序 350
13.2.3 DOM2级事件处理程序 351
13.2.4 IE事件处理程序 352
13.2.5跨浏览器的事件处理程序 353
13.3事件对象 355
13.3.1 DOM中的事件对象 355
13.3.2 IE中的事件对象 358
13.3.3跨浏览器的事件对象 360
13.4事件类型 362
13.4.1 UI事件 362
13.4.2焦点事件 367
13.4.3鼠标与滚轮事件 368
13.4.4键盘与文本事件 379
13.4.5复合事件 384
13.4.6变动事件 385
13.4.7 HTML5事件 388
13.4.8设备事件 395
13.4.9触摸与手势事件 399
13.5内存和性能 402
13.5.1事件委托 402
13.5.2移除事件处理程序 404
13.6模拟事件 405
13.6.1 DOM中的事件模拟 405
13.6.2 IE中的事件模拟 410
13.7小结 411
第14章 表单脚本 412
14.1表单的基础知识 412
14.1.1提交表单 413
14.1.2重置表单 414
14.1.3表单字段 414
14.2文本框脚本 419
14.2.1选择文本 420
14.2.2过滤输入 423
14.2.3自动切换焦点 426
14.2.4 HTML5约束验证API 427
14.3选择框脚本 431
14.3.1选择选项 432
14.3.2添加选项 434
14.3.3移除选项 435
14.3.4移动和重排选项 435
14.4表单序列化 436
14.5富文本编辑 438
14.5.1使用contenteditable属性 438
14.5.2操作富文本 439
14.5.3富文本选区 441
14.5.4表单与富文本 443
14.6小结 443
第15章 使用Canvas绘图 445
15.1基本用法 445
15.2 2D上下文 446
15.2.1填充和描边 446
15.2.2绘制矩形 447
15.2.3绘制路径 449
15.2.4绘制文本 451
15.2.5变换 453
15.2.6绘制图像 456
15.2.7阴影 457
15.2.8渐变 458
15.2.9模式 460
15.2.10使用图像数据 460
15.2.11合成 462
15.3 WebGL 463
15.3.1类型化数组 463
15.3.2 WebGL上下文 468
15.3.3支持 478
15.4小结 478
第16章 HTML5脚本编程 480
16.1跨文档消息传递 480
16.2原生拖放 481
16.2.1拖放事件 482
16.2.2自定义放置目标 482
16.2.3 dataTransfer对象 483
16.2.4 dropEffect与effectAllowed 484
16.2.5可拖动 485
16.2.6其他成员 485
16.3媒体元素 486
16.3.1属性 487
16.3.2事件 488
16.3.3自定义媒体播放器 488
16.3.4检测编解码器的支持情况 489
16.3.5 Audio类型 490
16.4历史状态管理 491
16.5小结 492
第17章 错误处理与调试 493
17.1浏览器报告的错误 493
17.1.1 IE 493
17.1.2 Firefox 494
17.1.3 Safari 496
17.1.4 Opera 497
17.1.5 Chrome 498
17.2错误处理 499
17.2.1 try-catch语句 500
17.2.2抛出错误 503
17.2.3错误(error)事件 505
17.2.4处理错误的策略 506
17.2.5常见的错误类型 507
17.2.6区分致命错误和非致命错误 510
17.2.7把错误记录到服务器 511
17.3调试技术 512
17.3.1将消息记录到控制台 512
17.3.2将消息记录到当前页面 515
17.3.3抛出错误 515
17.4常见的IE错误 516
17.4.1操作终止 516
17.4.2无效字符 518
17.4.3未找到成员 518
17.4.4未知运行时错误 519
17.4.5语法错误 519
17.4.6系统无法找到指定资源 519
17.5小结 520
第18章 JavaScript与XML 521
18.1浏览器对XML DOM的支持 521
18.1.1 DOM2级核心 521
18.1.2 DOMParser类型 522
18.1.3 XMLSerializer类型 523
18.1.4 IE8及之前版本中的XML 523
18.1.5跨浏览器处理XML 527
18.2浏览器对XPath的支持 529
18.2.1 DOM3级XPath 529
18.2.2 IE中的XPath 534
18.2.3跨浏览器使用XPath 535
18.3浏览器对XSLT的支持 537
18.3.1 IE中的XSLT 537
18.3.2 XSLTProcessor类型 541
18.3.3跨浏览器使用XSLT 543
18.4小结 544
第19章 E4X 546
19.1 E4X的类型 546
19.1.1 XML类型 546
19.1.2 XMLList类型 547
19.1.3 Namespace类型 548
19.1.4 QName类型 549
19.2一般用法 550
19.2.1访问特性 551
19.2.2其他节点类型 552
19.2.3查询 553
19.2.4构建和操作XML 555
19.2.5解析和序列化 557
19.2.6命名空间 558
19.3其他变化 559
19.4全面启用E4X 560
19.5小结 561
第20章 JSON 562
20.1语法 562
20.1.1简单值 562
20.1.2对象 563
20.1.3数组 564
20.2解析与序列化 565
20.2.1 JSON对象 565
20.2.2序列化选项 566
20.2.3解析选项 569
20.3小结 570
第21章 Ajax与Comet 571
21.1 XMLHttpRequest对象 571
21.1.1 XHR的用法 573
21.1.2 HTTP头部信息 575
21.1.3 GET请求 576
21.1.4 POST请求 577
21.2 XMLHttpRequest 2级 578
21.2.1 FormData 578
21.2.2超时设定 579
21.2.3 overrideMimeType()方法 580
21.3进度事件 580
21.3.1 load事件 580
21.3.2 progress事件 581
21.4跨源资源共享 582
21.4.1 IE对CORS的实现 582
21.4.2其他浏览器对CORS的实现 584
21.4.3 Preflighted Reqeusts 584
21.4.4带凭据的请求 585
21.4.5跨浏览器的CORS 585
21.5其他跨域技术 586
21.5.1图像Ping 586
21.5.2 JSONP 587
21.5.3 Comet 588
21.5.4服务器发送事件 590
21.5.5 Web Sockets 591
21.5.6 SSE与Web Sockets 593
21.6安全 593
21.7小结 594
第22章 高级技巧 596
22.1高级函数 596
22.1.1安全的类型检测 596
22.1.2作用域安全的构造函数 597
22.1.3惰性载入函数 600
22.1.4函数绑定 602
22.1.5函数柯里化 604
22.2防篡改对象 606
22.2.1不可扩展对象 606
22.2.2密封的对象 607
22.2.3冻结的对象 608
22.3高级定时器 609
22.3.1重复的定时器 610
22.3.2 Yielding Processes 612
22.3.3函数节流 614
22.4自定义事件 616
22.5拖放 618
22.5.1修缮拖动功能 620
22.5.2添加自定义事件 622
22.6小结 624
第23章 离线应用与客户端存储 626
23.1离线检测 626
23.2应用缓存 627
23.3数据存储 628
23.3.1 Cookie 629
23.3.2 IE用户数据 637
23.3.3 Web存储机制 638
23.3.4 IndexedDB 643
23.4小结 654
第24章 最佳实践 656
24.1可维护性 656
24.1.1什么是可维护的代码 656
24.1.2代码约定 657
24.1.3松散耦合 659
24.1.4编程实践 662
24.2性能 666
24.2.1注意作用域 666
24.2.2选择正确方法 667
24.2.3最小化语句数 672
24.2.4优化DOM交互 673
24.3部署 676
24.3.1构建过程 676
24.3.2验证 677
24.3.3压缩 679
24.4小结 681
第25章 新兴的API 682
25.1 requestAnimationFrame() 682
25.1.1早期动画循环 682
25.1.2循环间隔的问题 683
25.1.3 mozRequestAnimation-Frame 683
25.1.4 webkitRequestAnima-tionFrame与msRequest-AnimationFrame 685
25.2 Page Visibility API 686
25.3 Geolocation API 687
25.4 File API 689
25.4.1 FileReader类型 690
25.4.2读取部分内容 692
25.4.3对象URL 693
25.4.4读取拖放的文件 694
25.4.5使用XHR上传文件 695
25.5 Web计时 696
25.6 Web Workers 697
25.6.1使用Worker 697
25.6.2 Worker全局作用域 698
25.6.3包含其他脚本 699
25.6.4 Web Workers的未来 700
25.7小结 700
附录A ECMAScript Harmony 701
附录B 严格模式 717
附录C JavaScript库 723
附录D JavaScript工具 727