第1章 JavaScript简介 1
1.1 JavaScript的历史 1
1.2 展望ES5和ECMAScriptHarmony 2
1.3 JavaScript开发人员的舞台 3
1.4 真实世界中的JavaScript 4
1.4.1 浏览器中的JavaScript 4
1.4.2 服务器端的JavaScript 5
1.4.3 ActionScript和Flash 6
1.4.4 Adobe Integrated Runtime(AIR) 7
1.4.5 在其他的Adobe产品中 7
1.4.6 桌面窗口部件(Widget) 7
1.5 互补的其他技术 7
1.5.1 超文本标记语言(HTML) 7
1.5.2 层叠样式表(CSS) 8
1.5.3 浏览器对象模型(BOM) 9
1.5.4 文档对象模型(DOM) 10
1.6 使用JavaScript的场合 10
1.7 主要的JavaScript引擎 12
1.7.1 引擎所支持的ECMAScript 13
1.7.2 一般等价性 14
1.7.3 JavaScript引擎的性能 15
1.8 基本开发工具 16
1.8.1 选择一种文本编辑器 16
1.8.2 Web服务器 17
1.8.3 测试浏览器 18
1.9 第一个JavaScript应用程序 18
1.10 小结 20
第2章 浏览器中的JavaScript 21
2.1 文档对象模型 21
2.2 <script>元素 22
2.3 隐藏脚本 24
2.4 <noscript>元素 24
2.5 执行和加载脚本的顺序 25
2.5.1 内联脚本 25
2.5.2 外部脚本 27
2.5.3 延迟脚本的执行 27
2.5.4 以事件驱动方式执行脚本 28
2.5.5 动态加载JavaScript脚本 30
2.6 在URL中执行JavaScript代码 31
2.7 跨浏览器的兼容性 32
2.8 小结 33
第3章 JavaScript基础 35
3.1 一般特性 35
3.1.1 一种动态语言 35
3.1 2 基于原型的语言 36
3.1 3 字符编码 36
3 1.4 区分大小写 37
3.1.5 空白和分号 37
3.1.6 字面量 38
3.1.7 语句 42
3.1.8 块 42
3.1.9 闭包 43
3 1.10 注释 43
3.1.11 保留字 43
3.2 变量 44
3.2.1 声明变量 44
3.2.2 隐式声明 44
3.2.3 标识符 45
3.2.4 弱类型化 45
3.2.5 内存和垃圾回收 46
3.3 数据类型 46
3.3.1 基本数据类型与引用类型 46
3.3.2 操纵值类型与操纵引用类型 47
3.3.3 Null和Undefined 48
3.3.4 确定变量的类型 49
3.3.5 类型转换 49
3.3.6 基本类型与基本对象 52
3.4 小结 53
第4章 表达式、操作符和语句 55
4.1 JavaScript中的表达式 55
4.2 JavaScript中的操作符 56
4.2.1 操作符的类型 56
4.2.2 比较操作符 56
4 2.3 赋值操作符 60
4.2.4 逻辑操作符 62
4.2.5 按位操作符 64
4.2.6 组合操作符 67
4.2.7 其他类型的操作符 68
4.2.8 操作符的优先级和结合性 72
4.3 JavaScript语句 74
4.3.1 条件语句 76
4.3.2 循环和迭代 79
4.3.3 函数语句 88
4.3.4 异常处理语句 88
4.3.5 杂项语句 91
4.4 小结 93
第5章 函数 95
5.1 函数对象 95
5.2 声明函数 96
5.3 传递参数:传递值参数与传递引用参数 98
5.4 返回值 99
5.5 变量的作用域 99
5.6 函数重载 101
5.6.1 可选参数 104
5.6.2 arguments对象 106
5.6.3 散列参数 107
5.7 嵌套函数 110
5.8 闭包 110
5.8.1 使用闭包 111
5.8.2 循环内的闭包 113
5.8.3 循环引用 115
5.8.4 意外的闭包 117
5.9 执行上下文和作用域 117
5.9.1 使用apply()方法 118
5.9.2 使用call()方法 119
5.10 小结 119
第6章 全局对象和Object对象 121
6.1 全局对象的特性 121
6.2 浏览器中的全局对象 121
6.3 获取全局对象 122
6.4 全局属性 123
6.5 全局函数 124
6.5.1 URI编码 125
6.5.2 计算的代码 126
6.5.3 数值的辅助方法 127
6.6 全局对象类 128
6.7 Object对象 128
6.7.1 对象的原型 130
6.7.2 检查是否存在指定的属性 131
6.7.3 valueOf()和toString()方法 131
6.7.4 对Object对象非常有用的实用程序 132
6.8 小结 138
第7章 String和RegExp对象 139
7.1 String对象概述 139
7.2 字符串基础 140
7.2.1 字符串字面量 140
7.2.2 编码字符串 141
7.2.3 字符串中的换行符 143
7.2.4 字符串的不变性 144
7.2.5 字符串的长度 144
7.2.6 字符串是基本类型还是对象类型 145
7.2.7 扩展String对象 147
7.2.8 字符串的连接 148
7.2.9 字符串和数值 150
7.2 10 将其他类型的数据转换为字符串 150
7.2.11 字符串的比较 151
7.3 使用字符串 153
7.3.1 格式化方法 153
7.3.2 处理大小写 156
7.3.3 搜索和替换 157
7.3.4 截取字符串 179
7.3.5 字符串和数组 183
7.3.6 编码用于URL的字符串 184
7.4 小结 184
第8章 Boolean、Number和Math对象 187
8.1 Boolean对象 187
8.1.1 Boolean对象概述 187
8.1.2 使用布尔值 188
8.1.3 转换为布尔类型 189
8.1.4 为Boolean对象添加XOR功能 190
8.2 Number对象 190
8.2.1 Number对象概述 191
8.2.2 整数值和浮点数值 191
8.2.3 Number字面量 192
8.2.4 数值和字符串 192
8.2.5 将其他类型的数据转换为数值 194
8.2.6 NaN和Infinity 195
8.2.7 最大值和最小值 196
8.3 Math对象 197
8.3.1 Math对象概述 197
8.3.2 数学常量 198
8.3.3 Math对象的实用程序 199
8.3.4 使用round()函数进行取整 200
8.3.5 随机数 200
8.3.6 简化对Math对象的重复调用 201
8.4 小结 202
第9章 Array和Date对象 203
9.1 Array对象 203
9.1.1 Array对象概述 203
9.1.2 创建数组 204
9.1.3 以索引的方式访问数组 205
9.1.4 多维数组 206
9.1.5 检测数组 206
9.1.6 数组的大小 209
9.1.7 遍历数组 209
9.2 向数组添加元素 210
9.2.1 合并数组 211
9.2.2 从数组中移除元素 213
9.2.3 关联数组(散列表) 215
9.2.4 数组是一种引用类型 217
9.2.5 数组和字符串 219
9.3 Date对象 220
9.3.1 Date对象概述 220
9.3.2 创建日期对象 222
9.4 世界时间概述 223
9.4.1 分析日期字符串 224
9.4.2 读取或写入日期数据 225
9.4.3 测量时间差 230
9.4.4 计时器和间隔触发 230
9.5 小结 233
第10章 面向对象开发 235
10.1 面向对象的JavaScript 235
10.2 创建对象 237
10.3 删除属性和对象 237
10.4 对象是引用类型 238
10.5 将对象作为数组使用 238
10.6 比较对象 240
10.7 克隆对象 241
10.8 静态成员 241
10.9 构造函数 242
10.10 原型 243
10.11 this关键字 244
10.12 私有成员 245
10.12.1 特权成员 246
10.12.2 Get存取器和Set存取器 247
10.13 JavaScript中的继承 248
10.13.1 基于原型的继承 249
10.13 2 原型的问题 251
10.13.3 实现继承的其他方式 252
10.14 小结 254
第11章 窗口和框架 255
11.1 浏览器对象模型简介 255
11.2 window对象 256
11.3 使用框架 257
11.3.1 创建框架 257
11 3.2 Frame对象模型 258
11.3.3 引用框架 258
11.4 操纵浏览器窗口 259
11.4 1 状态栏 260
11.4.2 打开和关闭浏览器窗口 260
11.4.3 设置窗口的location 267
11.4.4 编码URL中的字符串 268
11.4.5 窗口的历史记录 270
11.4.6 移动窗口和改变窗口的尺寸 270
11.4.7 滚动窗口 270
11.5 对话框和警告消息框 271
11.6 获取浏览器和操作系统信息 272
11.6.1 浏览器检测基础 272
11.6.2 navigator对象 274
11.6.3 语言检测 275
11.6.4 screen对象 275
11.6.5 浏览器和操作系统信息检测类 276
11.7 窗口事件 282
11.8 小结 283
第12章 事件 285
12.1 基础的事件模型 286
12.2 注册基础 288
12.3 阻止事件的默认行为 290
12.4 非侵扰式JavaScript 291
12.5 非侵扰式事件注册 292
12.5.1 检测事件监听器 294
12.5.2 事件对象 294
12.5.3 一个跨浏览器的事件实用程序 297
12.6 事件的传播 298
12.6.1 IE鼠标事件的捕获模式 301
12.6.2 默认的事件处理程序 302
12.6.3 阻止事件的传播 302
12.7 生成事件 303
12.8 常见的事件绑定 305
12.8.1 检测键盘按键 305
12.8.2 鼠标位置 306
12.8.3 scroll事件 308
12.8.4 resize事件 309
12.8.5 load和unload事件 309
12.8.6 domready事件 310
12.8.7 mouseenter事件和mouseleave事件 312
12.9 事件的兼容性 315
12.10 白定义事件 317
12.11 小结 318
第13章 文档对象模型 321
13.1 DOM的历史 321
13.1.1 最早的DOM模型 322
13.1.2 增加了Images集合的基本模型 322
13.1.3 Navigator 4的扩展 323
13.1.4 Internet Explorer 4的扩展 323
13.1.5 Internet Explorer 5的扩展 324
13.1.6 W3C的标准DOM模型 324
13.2 文档类型 325
13.2.1 怪异模式的特点 326
13.2.2 检测DOCTYPE 326
13.3 Document树 327
13.4 节点类型 328
13.5 节点属性 329
13.6 节点的方法 330
13.7 implementation对象 330
13.8 遍历DOM 331
13.9 元素的属性 334
13.10 查找特定的元素 337
13.10.1 元素集合 337
13.10.2 getElementsByName 338
13.10.3 getElementsByTagName 338
13.10.4 getElementByld 339
13.10.5 XPath 339
13.11 创建和删除节点 340
13.11.1 添加新的节点 340
13.11.2 重绘和重新布局 342
13.11.3 文档片段 343
13.11.4 修改DOM方式的性能比较 343
13.11.5 移除节点 344
13.11.6 替换节点 345
13.12 DOM范围 345
13.12.1 DOM中的范围 345
13.12.2 范围的边界 347
13.12.3 改变内容 348
13.12.4 折叠范围 348
13.12.5 用户选择集范围 349
13.13 小结 351
第14章 表单 353
14.1 Form对象 353
14.2 表单元素 356
14.3 基本的表单操作 359
14.3.1 提交表单和复位表单 359
14.3.2 使用onsubmit事件 359
14.3.3 阻止Enter键提交表单 360
14.3.4 启用和禁用表单字段 361
14.3.5 阻止重复提交表单 362
14.3.6 将输入焦点设置到表单字段 363
14.4 使用表单的输入元素 363
14.4.1 命令按钮 363
14.4.2 复选框 364
14.4.3 单选按钮 365
14.4.4 单选列表框和多选列表框 367
14.4.5 文本框、textarea和密码框 369
14.4.6 隐藏字段 373
14.4.7 文件输入字段 373
14.5 富文本字段(WYSIWYG) 374
14.6 小结 379
第15章 层叠样式表 381
15.1 概述 381
15.1.1 在文档中嵌入CSS 381
15.1.2 版本 383
15.1.3 样式表是如何层叠的 385
15.1.4 CSS和DOM 385
15.2 styleSheet对象和Style对象 390
15.3 导入的样式表 392
15.4 遍历所有的样式表 392
15.5 添加和移除样式表 395
15.6 遍历所有的规则 396
15.7 读取和写入样式属性 397
15.8 添加和移除样式规则 399
15.9 最终样式表 401
15.10 IE的filter对象 402
15.11 小结 403
第16章 动态HTML 405
16.1 CSS的地位 406
16.2 窗口和文档的几何尺寸 407
16.3 获取滚动条的宽度 409
16.4 元素的度量 411
16.5 图像切换和翻转 412
16.6 定位 416
16.6.1 绝对定位和相对定位 416
16.6.2 zIndex的脚本编程 419
16.6.3 获取元素的绝对位置 420
16.7 动画 424
16.7.1 使用计时器创建伪线程 424
16.7.2 非线性动画和补问动画 426
16.8 颜色和不透明度 429
16.8.1 颜色 430
16.8.2 淡入淡出效果 430
16.8.3 不透明度 431
16.8.4 Internet Explorer和32Bit图像 431
16.9 模态对话框 432
16.10 表单提示工具 439
16.11 小结 444
第17章 JavaScript安全 447
17.1 安全模型 447
17.2 同源策略 448
17.2.1 使用document.domain的例外 449
17.2.2 跨站脚本攻击 449
17.2.3 跨站伪造请求 450
17.2.4 搭载传送 450
17.3 签名脚本 451
17.3.1 Mozilla中要求扩展特权的特性 451
17.3.2 Internet Explorer中的签名脚本 451
17.4 安全策略和安全区域 452
17.4.1 Mozilla的安全策略 452
17.4.2 Internet Explorer中的安全区域 453
17.5 其他安全问题 454
17.5.1 浏览器的新窗口 454
17.5.2 拒绝服务 454
17.5.3 数据的安全性 454
17.5.4 ActiveX 455
17.5.5 F1ash 456
17.5.6 JSON和eval()函数 456
17.6 小结 456
第18章 客户端数据和持久化 459
18.1 持久化数据的各种方法 460
18.2 cookie 460
18.2.1 创建和读取cookie 461
18.2.2 删除cookie 463
18.3 Internet Explorer中的UserData 463
18.3.1 初始化UserData 464
18.3.2 读取和写入UserData 465
18.4 W3C的DOM存储 466
18.4.1 读取和写入DOM存储 467
18.4.2 使用DOM存储事件 467
18.5 HTML 5客户端数据库 469
18.5.1 创建SQLite数据库 469
18.5.2 读取和写入SQLite数据 471
18.5.3 Safari的SQLite数据库浏览器 472
18.6 Flash本地共享对象 473
18.7 使用window.name存储数据 476
18.8 小结 479
第19章 Ajax 481
19.1 XMLHttpRequest 482
19.1.1 打开一个连接 484
19.1.2 请求和响应的头信息 487
19.2 安全 488
19.3 跨域Ajax 489
19.3.1 跨域通信方法的比较 489
19.3.2 document.domain 490
19.3.3 服务器代理 490
19.3.4 iFrame 491
19.3.5 图像注入 491
19.3.6 脚本注入 492
19.3.7 用Flash实现跨域通信的方式 492
19.3.8 跨域XMLHttpRequest 493
19.4 历史纪录和书签 494
19.5 小结 500
第20章 使用XML 501
20.1 加载XML 501
20.1.1 反序列化文本 501
20.1.2 加载外部XML文档 504
20.1.3 错误处理 506
20.2 将XML序列化为Text 507
20.3 使用XML DOM API 508
20.3.1 元素和节点 508
20.3.2 遍历DOM 509
20.3.3 执行XPath查询 511
20.4 使用XSLT转换数据 515
20.5 E4X 519
20.6 小结 520
第21章 使用JSON 521
21.1 从JavaScript字面量到JSON 522
21.2 标签和编码 523
21.3 计算JSON代码 524
21.4 安全问题 525
21.5 JSoN与XML 525
21.6 将对象序列化为JSON 526
21.6.1 自定义toJSON()方法 528
21.6.2 使用Replacer 529
21.7 加载JSON数据 530
21.7.1 自定义Reviver 531
21.7.2 错误处理 532
21.7.3 JSON和Ajax 533
21.7.4 JSONP 534
21.8 小结 536
第22章 特有的浏览器功能 537
22.1 加速器 537
22.2 canvas 539
22.3 条件编译 541
22.4 CSS变换 542
22.5 地理定位 544
22.5.1 检测是否支持geolocation 544
22.5.2 获取坐标 545
22.6 Google Gears 546
22.6.1 检测并安装Gears 546
22.6.2 使用数据库 546
22.6.3 使用geolocation 547
22.6.4 使用WorkerPool 548
22.7 搜索服务提供者 549
22.8 矢量图形标记语言 550
22.9 Web Workers 551
22.10 终止一个Worker 552
22.11 小结 553
第23章 插件与脚本编程 555
23.1 Java Applets 555
23.2 Flash电影 558
23.2.1 创律Flash电影 559
23.2.2 使用SWFObject嵌入Flash电影 562
23.2.3 访问Flash电影的属性和方法 562
23.3 Silverlight电影 564
23.3.1 建立一个Silverlight应用程序 564
23.3.2 使用JavaScript嵌入Silverlight电影 566
23.3.3 RegisterScriptableObject介绍 566
23.3.4 JavaScfipt与Silverlight的通信 568
23.4 QuickTime 569
23.4.1 检测QuickTime 569
23.4.2 嵌入QuickTime电影 570
23.4.3 在JavaScfipt中控制QuickTime电影 571
23.4.4 QuickTime电影的事件 573
23.5 小结 575
第24章 调试 577
24.1 错误的类型 577
24.2 Error对象概述 578
24.3 抛出错误 579
24.4 错误处理程序 580
24.5 跟踪调用栈 581
24.6 调试工具 583
24.6.1 用于Firefox的Firebug 583
24.6.2 Firebug Lite 586
24.6.3 Internet Explorer Developer Toolbar 587
24.6.4 Opera的Dragonfly 588
24.6.5 Fiddler 588
24.6.6 Charles Proxy Debugger 589
24.6.7 Safari Web Inspector 589
24.7 测试 590
24.8 小结 591
第25章 性能调整 593
25.1 减少页面重量 594
25.1.1 post-loaded脚本请求 595
25.1.2 缓存 595
25.1.3 子图像 596
25.1.4 缩减并串接JavaScript 596
25.1.5 gZip压缩 597
25.1.6 内容分发网络 597
25.2 代码分析 598
25.2.1 使用Firebug进行代码分析 598
25.2.2 IE8 JScfipt Profiler 598
25.2.3 使用YSlow获得总体分析 599
25.3 代码优化 599
25.3.1 删除无用的对象 600
25.3.2 避免对代码计算 600
25.3.3 查找局部变量和查找全局变量 601
25.3.4 对象和函数指针 602
25.3.5 避免使用with语句 602
25.3.6 避免在重复操作中使用try…catch语句 603
25.3.7 重复for…in循环 604
25.3.8 改进循环的性能 604
25.4 DHTML优化 605
25.4.1 重绘和重新布局 605
25.4.2 先隐藏元素再修改样式 606
25.4.3 以成组方式改变DOM 606
25.4.4 以成组方式改变样式 607
25.4.5 测量元素 607
25.4.6 使用文档片段 608
25.4.7 线程处理需要长时间运行的任务 608
25.5 小结 609
附录A 核心JavaScript语言 611
附录B JavaScript全局对象 679
附录C JavaScript全局属性 837
附录D JavaScript全局函数 841
附录E 保留字和特殊字 849
附录F 文档对象参考 851
附录G Web上的资源 911