第Ⅰ部分概 述 3
第1章 JavaScript介绍 3
1.1 Hello JavaScript World 3
1.2 向XHTML文档添加JavaScript 7
1.2.1 <script>元素 7
1.2.2 事件处理程序 11
1.2.3 链接脚本 13
1.2.4 Javascript伪URL 15
1.3 使用JavaScript的考虑事项 17
1.3.1 脚本屏蔽 17
1.3.2 <noscript>元素 18
1.3.3 语言版本 20
1.3.4 跨浏览器考虑 24
1.3.5 与其他脚本混用 25
1.4 JavaScript:真正的编程语言 26
1.4.1 JavaScript的历史 27
1.4.2 JavaScript的常见用途 28
1.4.3 JavaScript库的崛起 30
1.4.4 JavaScript的未来 31
1.5 小结 32
第2章 JavaScript核心语言特征概述 33
2.1 基本定义 33
2.2 执行顺序 34
2.3 区分大小写 34
2.4 空白符 35
2.5 语句 36
2.5.1 分号 36
2.5.2 代码块 37
2.6 变量 38
2.7 基本数据类型 38
2.7.1 弱类型 39
2.7.2 类型转换 40
2.8 复合类型 42
2.8.1 对象 43
2.8.2 数组 46
2.8.3 函数作为数据类型 47
2.8.4 正则表达式字面值与对象 48
2.9 表达式 48
2.9.1 算术运算符 48
2.9.2 位运算符 49
2.9.3 赋值运算符 49
2.9.4 逻辑运算符 51
2.9.5 条件运算符 51
2.9.6 类型运算符 51
2 9.6 逗号运算符 52
2.9.7 关系运算符 52
2.9.8 运算符的优先级与结合性 53
2.10 流程控制 54
2.11 循环 55
2.12 JavaScript中的输入与输出 58
2.13 函数 62
2.14 作用域规则 64
2.15 正则表达式 65
2.16 异常 66
2.17 注释 67
2.18 ECMAScript 5的变化 68
2.18.1 “use strict” 68
2.18.2 原生JSON支持 69
2.18.3 Function.prototype.bind() 69
2.18.4 ISO日期 69
2.18.5 数组新增的原生特征 70
2.18.6 String.prototype.trim() 70
2.18.7 对象/属性的新增特征 70
2.18.8 新兴特征 71
2.19 小结 71
第Ⅱ部分核心语言 75
第3章 数据类型与变量 75
3.1 关键概念 75
3.2 JavaScript的基本类型 77
3.2.1 数字类型 77
3.2.2 字符串 83
3.2.3 布尔类型 87
3.2.4 undefined类型与null 88
3.3 复合类型 89
3.3.1 对象 89
3.3.2 数组 91
3.3.3 函数 92
3.3.4 typeof运算符 93
3.4 类型转换 94
3.4.1 基本类型的转换规则 95
3.4.2 基本数据类型提升为对象 97
3.4.3 显式类型转换 97
3.5 变量 99
3.5.1 标识符 99
3.5.2 变量声明 103
3.5.3 隐式变量声明 104
3.5.4 变量的作用域 105
3.6 常量 109
3.7 小结 110
第4章 运算符、表达式和语句 111
4.1 语句基础 111
4.1.1 空白符 111
4.1.2 结束:分号与返回 112
4.1.3 代码块 113
4.2 运算符 114
4.2.1 赋值运算符 114
4.2.2 算术运算符 115
4.2.3 位运算符 118
4.2.4 移位运算符 119
4.2.5 算术运算符以及位运算符与赋值运算符的组合 120
4.2.6 递增与递减运算符 121
4.2.7 比较运算符 123
4.2.8 逻辑运算符 125
4.2.9 “?”运算符 125
4.2.10 逗号运算符 126
4.2.11 void运算符 127
4.2.12 typeof 128
4.2.13 对象运算符 128
4.2.14 运算符的优先级与结合性 130
4.3 核心JavaScript语句 132
4.3.1 if语句 132
4.3.2 switch语句 136
4.3.3 while循环 139
4.3.4 do-while循环 141
4.3.5 for循环 142
4.3.6 使用continue和break控制循环 143
4.3.7 与对象相关的语句 146
4.3.8 其他语句 148
4.4 小结 148
第5章 函数 149
5.1 函数基础 149
5.1.1 参数传递基础 150
5.1.2 返回语句 152
5.1.3 参数传递:输入和输出 152
5.2 全局变量和局部变量 154
5.2.1 针对作用域的变量命名 156
5.2.2 内部函数 157
5.3 闭包 159
5.4 函数作为对象 160
5.4.1 函数字面值 161
5.4.2 静态变量 163
5.4.3 高级参数传递 164
5.4.4 Function的高级属性与方法 166
5.5 递归函数 168
5.6 小结 170
第6章 对象 171
6.1 JavaScript中的对象 171
6.2 对象基础 172
6.2.1 对象创建 173
6.2.2 对象销毁与垃圾回收 175
6.2.3 属性 175
6.2.4 对象是引用类型 180
6.2.5 通用属性和方法 185
6.3 面向对象的JavaScript 186
6.3.1 基于原型的对象 187
6.3.2 构造函数 188
6.3.3 原型 190
6.3.4 类属性 192
6.3.5 通过原型链继承 193
6.3.6 改写默认的方法和属性 198
6.4 ECMAScript 5的面向对象变化 198
6.5 JavaScript的面向对象真相 202
6.6 小结 203
第7章 数组、日期、数学对象以及与类型相关的对象 205
7.1 数组 205
7.1.1 访问数组元素 206
7.1.2 添加和修改数组元素 207
7.1.3 移除数组元素 208
7.1.4 length属性 209
7.1.5 将数组作为栈和队列 212
7.1.6 操作数组 213
7.1.7 多维数组 219
7.1.8 使用原型扩展数组 220
7.1.9 ECMAScript 5中的数组新增特征 221
7.2 Boolean对象 236
7.3 Date对象 237
7.3.1 创建日期 237
7.3.2 操作日期 238
7.3.3 ECMAScript 5中的Date新增特征 243
7.4 Global对象 244
7.5 Math对象 247
7.6 Number对象 249
7.7 字符串 250
7.7.1 检查字符串 251
7.7.2 操作字符串 252
7.7.3 将字符串标记为传统的HTML 253
7.7.4 ECMAScript 5中的字符串变换 255
7.8 小结 256
第8章 正则表达式 257
8.1 正则表达式的需求 257
8.2 JavaScript正则表达式介绍 258
8.3 RegExp对象 270
8.3.1 test() 270
8.3.2 子表达式 271
8.3.3 compile() 272
8.3.4 exec() 272
8.3.5 RegExp属性 276
8.4 字符串的正则表达式 280
8.4.1 search() 280
8.4.2 split() 281
8.4.3 replace() 282
8.4.4 match() 284
8.5 高级正则表达式 285
8.5.1 多行匹配 285
8.5.2 非捕获圆括号 286
8.5.3 向前匹配 286
8.5.4 贪婪匹配 287
8.6 正则表达式的局限 288
8.7 小结 289
第9章 JavaScript对象模型 291
9.1 对象模型概述 291
9.2 最初的JavaScript对象模型 293
9.3 Document对象 294
9.3.1 根据位置访问文档元素 298
9.3.2 根据名称访问文档元素 300
9.4 简单事件处理 304
9.4.1 设置内联事件处理程序 304
9.4.2 直接为事件处置程序赋值 304
9.4.3 设置事件侦听器 305
9.4.4 调用事件处理程序 307
9.5 JavaScript+DOM+选择+事件=程序 308
9.6 JavaScript对象模型的演化 310
9.6.1 浏览器对象模型的早期演化 311
9.6.2 面向DHTML的对象模型 313
9.6.3 Internet Explorer 4的DHTML对象模型 314
9.6.4 超越DHTML对象模型 315
9.7 小结 315
第10章 标准文档对象模型 317
10.1 DOM特色 317
102文档树 320
10.3 基本的元素访问:getElementById() 324
10.4 其他元素访问方法 332
10.4.1 getElementByName() 332
10.4.2 通用JavaScript集合 333
10.4.3 getElementByTagName() 335
10.4.4 通用的树遍历开始点 336
10.4.5 document.getElement-ByClassName() 338
10.4.6 querySelector()与querySelectorAll() 340
10.5 创建节点 343
10.6 追加和插入节点 344
10.6.1 文本节点和normalize()方法 345
10.6.2 insertBefore()方法 346
10.6.3 其他插入方法 347
10.7 动态标记插入 349
10.7.1 innerHTML 349
10.7.2 outerHTML 352
10.8 innerText和outerText 352
10.8.1 insertAdjacentHTML()和insertAdjacentText() 354
10.8.2 document.write()和document.writeln() 355
10.9 复制节点 356
10.10 删除和替换节点 357
10.11 操作特性 361
10.12 其他节点方法 366
10.13 名称空间 367
10.14 DOM和HTML元素 368
10.15 DOM表格操作 381
10.16 DOM和CSS 383
10.16.1 内联样式操作 383
10.16.2 使用类别和集合的动态样式 389
10.16.3 计算样式 393
10.16.4 访问复杂样式规则 394
10.17 DOM遍历API 396
10.18 DOM范围选择 398
10.19 不断持续的DOM演化 399
10.20 小结 399
第11章 事件处理 401
11.1 事件和事件处理概述 401
11.2 传统的事件处理模型 402
11.2.1 使用HTML特性的事件绑定 403
11.2.2 使用JavaScript绑定事件处理程序特性 410
11.2.3 事件处理程序作用域的细节 412
11.2.4 返回值 414
11.2.5 手动触发事件 415
11.3 现代事件模型概述 417
11.4 Internet Explorer的专有模型 418
11.4.1 attachEvent()和detachEvent() 419
11.4.2 事件对象 420
11.4.3 事件冒泡 423
11.4.4 模拟事件传递 425
11.4.5 事件创建 426
11.5 DOM事件模型 427
11.5.1 传统绑定的变化 427
11.5.2 addEventListener()和removeEventListener() 428
11.5.3 事件对象 430
11.5.4 阻止默认动作 432
11.5.5 控制事件传播 433
11.5.6 事件创建 435
11.6 事件类型 437
11.6.1 鼠标事件 437
11.6.2 UI事件 442
11.6.3 焦点事件 443
11.6.4 键盘事件 444
11.6.5 文本事件 446
11.6.6 突变事件 448
11.6.7 非标准事件 448
11.6.8 自定义事件 449
11.6.9 浏览器状态和加载事件 451
11.7 事件模型的问题 454
11.8 小结 455
第Ⅲ部分JavaScript应用 459
第12章 窗口、框架和重叠 459
12.1 窗口对象介绍 459
12.2 对话框 464
12.2.1 alert() 464
12.2.2 confirm() 465
12.2.3 prompt() 466
12.3 新兴的和专用的对话方法 468
12.3.1 showModalDialog() 468
12.3.2 showModallessDialog() 469
12.3.3 createPopup() 469
12.4 打开和关闭通用窗口 471
12.5 检测和控制窗口小件(chrome) 480
12.6 产生窗口的实际操作 481
12.6.1 构建窗口内容 482
12.6.2 覆盖物不是窗口 488
12.7 控制窗口 492
12.7.1 focus()和blur() 492
12.7.2 stop() 492
12.7.3 print() 492
12.7.4 find() 493
12.7.5 移动窗口 494
12.7.6 改变窗口大小 495
12.7.7 滚动窗口 495
12.7.8 访问和设置窗口的地址 500
12.7.9 URL中的哈希值 504
12.8 操作窗口的历史 506
12.8.1 pushstate()和replacestate() 506
12.8.2 尝试控制窗口的状态栏 509
12.9 为窗口设置超时计时器和周期性计时器 511
12.10 窗口事件 514
12.11 窗口间通信基础 517
12.12 框架:窗口的特例 521
12.12.1 内联框架 526
12.12.2 应用框架 527
12.13 小结 531
第13章 表单处理 533
13.1 JavaScript表单检查的必要性 533
13.2 表单基础 534
13.3 表单字段 538
13.3.1 输入元素的通用属性 538
13.3.2 按钮 540
13.3.3 传统的文本字段 544
13.3.4 HTML5语义文本域 547
13.3.5 文本域 549
13.3.6 复选框和单选按钮 551
13.3.7 选择菜单 554
13.3.8 日期选择器 558
13.3.9 颜色拾取器 560
13.3.10 滑块 561
13.3.11 文件上传域 562
13.3.12 隐藏字段 566
13.3.13 其他表单特征:标签、字段集和图例 567
13.4 表单的可用性与JavaScript 567
13.4.1 第一个字段具有焦点 568
13.4.2 标签和字段选择 568
13.4.3 报告和状态消息 569
13.4.4 数据列表 571
13.4.5 禁用字段和只读字段 572
13.5 表单验证 573
13.5.1 抽象表单验证 575
13.5.2 错误消息 584
13.5.3 onchange处理程序 587
13.5.4 键盘屏蔽 588
13.6 HTML5验证的改进 589
13.6.1 验证特性 589
13.6.2 用于验证的属性和方法 592
13.6.3 novalidate特性 593
13.7 HTML5表单的其他变化 593
13.8 国际化 595
13.9 小结 595
第14章 用户界面元素 597
14.1 添加JavaScript 597
14.1.1 探讨逐渐增强 601
14.1.2 优美降级方法 606
14.2 HTML5对富交互的支持 608
14.2.1 菜单和上下文菜单 608
14.2.2 拖放功能 616
14.2.3 内容编辑 624
14.2.4 根据要求显示内容 629
14.2.5 用户反馈 630
14.3 小结 632
第15章 Ajax和远程JavaScript 633
15.1 Ajax定义 633
15.2 Hello Ajax World 635
15.3 XMLHttpRequest对象 640
15.4 XHR实例化和跨浏览器考虑事项 642
15.4.1 ActiveX XHR低效运行的细节 643
15.4.2 跨浏览器的XHR包装 644
15.5 XHR请求基础 645
15.5.1 同步请求 645
15.5.2 异步请求 647
15.6 通过GET发送数据 648
15.7 通过Post发送数据 650
15.8 使用其他HTTP方法 650
15.9 设置请求头 651
15.10 响应基础 652
15.10.1 探究readyState 652
15.10.2 status和statusText 654
15.10.3 responseText 655
15.10.4 responseXML 656
15.10.5 response和responseTypes 659
15.10.6 JSON 660
15.10.7 脚本响应 666
15.10.8 响应头 666
15.11 控制请求 667
15.12 XHR的身份验证 669
15.13 适当的和新兴的XHR功能 671
15.13.1 管理MIME类型 671
15.13.2 多部分响应 671
15.13.3 onload、onloadstart和onloadend 672
15.13.4 onprogress和部分响应 673
15.13.5 onerror 674
15.14 表单串行化 675
15.15 跨域的Ajax请求 677
15.16 非XHR通信方法 681
15.16.1 图像标签 681
15.16.2 脚本标签 684
15.17 Comet和套接字 685
15.17.1 轮询:快或长 687
15.17.2 长慢加载 690
15.17.3 WebSocket 692
15.18 Ajax的内涵和挑战 695
15.19 小结 696
第16章 浏览器管理 697
16.1 浏览器检测基础 697
16.2 Navigator对象 698
16.3 检测的内容 701
16.3.1 技术检测 702
16.3.2 可视化检测:Screen对象 707
16.3.3 用户特征 716
16.4 网络状态和性能 720
16.4.1 简单的页面加载度量 721
16.4.2 windows.performance.timing 722
16.5 浏览器控制 723
16.6 状态管理 729
16.6.1 JavaScript中的cookie 731
16.6.2 为用户状态管理使用cookie 735
16.6.3 cookie的局限性 738
16.6.4 存储 739
16.6.5 IndexedDB 740
16.6.6 AppCache 743
16.7 脚本执行 745
16.8 小结 750
第17章 媒体管理 751
17.1 图像处理 751
17.2 DHTML、DOMEffects与动画 762
17.3 使用<canvas>在客户端绘制位图图形 767
17.3.1 绘制和样式化直线和形状 771
17.3.2 绘制弧线和曲线 773
17.3.3 缩放、旋转和变换图画 781
17.3.4 在绘图中使用位图 785
17.3.5 <canvas>对文本的支持 787
17.3.6 组合 790
17.3.7 保存状态 792
17.3.8 <canvas>考虑事项 793
17.4 使用SVG在客户端绘制矢量图形 801
17.4.1 包含SVG 801
17.4.2 使用SVG进行绘图 802
17.4.3 SVG交互和动画 802
17.5 HTML5媒体处理 803
17.5.1 <video> 804
17.5.2 <audio> 808
17.5.3 媒体事件 809
17.6 插件 810
17.6.1 为插件嵌入内容 810
17.6.2 MIME类型 811
17.6.3 探测特定插件 814
17.6.4 与插件进行交互 816
17.7 ActiveX 822
17.7.1 包含ActiveX控件 822
17.7.2 与ActiveX控件进行交互 824
17.8 Java applet 826
17.8.1 包含applet 826
17.8.2 Java探测 827
17.8.3 使用JavaScript访问Applet 827
17.8.4 使用applet访问JavaScript 830
17.9 不确定的未来 830
17.10 小结 830
第18章 实践与发展趋势 831
18.1 编写高质量的JavaScript 831
18.1.1 编码风格 831
18.1.2 注释与文档 834
18.1.3 理解错误 837
18.1.4 调试 843
18.1.5 防错性编程 847
18.1.6 利用框架与库 852
18.2 安全性 857
18.3 JavaScript的安全策略 860
18.3.1 同源策略 860
18.3.2 信任的外部脚本 861
18.3.3 跨站点脚本 864
18.3.4 跨站点请求伪造(CSRF) 866
18.4 性能 868
18.4.1 性能度量与工具 868
18.4.2 页面加载性能 870
18.4.3 运行时性能 874
18.5 发展趋势 880
18.5.1 JavaScript无处不在 880
18.5.2 “修复”与隐藏JavaScript 880
18.6 小结 883
附录A JavaScript保留关键字 885