内容简介:
本书是JavaScript 超级畅销书的最新版。ECMAScript 5 和HTML5 在标准之争中双双胜出,使大量专有实现和客户端扩展正式进入规范,同时也为JavaScript 增添了很多适应未来发展的新特性。本书这一版除增加5 章全新内容外,其他章节也有较大幅度的增补和修订,新内容篇幅约占三分之一。全书从JavaScript 语言实现的各个组成部分——语言核心、DOM、BOM、事件模型讲起,深入浅出地探讨了面向对象编程、Ajax 与Comet 服务器端通信,HTML5 表单、媒体、Canvas(包括WebGL)及Web Workers、地理定位、跨文档传递消息、客户端存储(包括IndexedDB)等新API,还介绍了离线应用和与维护、性能、部署相关的最佳开发实践。本书附录展望了未来的API 和ECMAScript Harmony 规范。
本书适合有一定编程经验的Web 应用开发人员阅读,也可作为高校及社会实用技术培训相关专业课程的教材。
作者简介:
作者简介:
Nicholas C. Zakas(尼古拉斯•泽卡斯)世界顶级Web技术专家,现为雅虎公司界面呈现架构师,负责My Yahoo!和雅虎首页等大访问量站点的设计。尼古拉斯拥有丰富的Web开发和界面设计经验,曾经参与许多世界级大公司的Web解决方案开发。他还是High Performance JavaScript一书的作者,并与他人合作撰写了Professional Ajax和Even Faster Web Sites。尼古拉斯拥有梅里马克学院计算机科学学士学位和埃迪柯特学院的MBA学位。他的个人网站是www.nczonline.net,他的Twitter别名是@slicknet。
目录:
目录
第1章 JavaScript简介1
1.1 JavaScript简史1
1.2 JavaScript实现2
1.2.1 ECMAScript3
1.2.2 文档对象模型(DOM)5
1.2.3 浏览器对象模型(BOM)8
1.3 JavaScript版本8
1.4 小结9
第2章 在HTML中使用JavaScript10
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章 BOM193
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章 DOM247
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 DocumentFragment类型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 使用NodeList283
10.3 小结284
第11章 DOM扩展286
11.1 选择符API286
11.1.1 querySelector()方法286
11.1.2 querySelectorAll()
方法287
11.1.3 matchesSelector()
方法288
11.2 元素遍历288
11.3 HTML5289
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和DOM3305
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 NodeIterator328
12.3.2 TreeWalker330
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约束验证API427
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 WebGL463
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与effectAllowed484
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 IE493
17.1.2 Firefox494
17.1.3 Safari496
17.1.4 Opera497
17.1.5 Chrome498
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与XML521
18.1 浏览器对XML DOM的支持521
18.1.1 DOM2级核心521
18.1.2 DOMParser类型522
18.1.3 XMLSerializer类型523
18.1.4 IE8及之前版本中的XML523
18.1.5 跨浏览器处理XML527
18.2 浏览器对XPath的支持529
18.2.1 DOM3级XPath529
18.2.2 IE中的XPath534
18.2.3 跨浏览器使用XPath535
18.3 浏览器对XSLT的支持537
18.3.1 IE中的XSLT537
18.3.2 XSLTProcessor类型541
18.3.3 跨浏览器使用XSLT543
18.4 小结544
第19章 E4X546
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 构建和操作XML555
19.2.5 解析和序列化557
19.2.6 命名空间558
19.3 其他变化559
19.4 全面启用E4X560
19.5 小结561
第20章 JSON562
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与Comet571
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 FormData578
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 Reqeusts584
21.4.4 带凭据的请求585
21.4.5 跨浏览器的CORS585
21.5 其他跨域技术586
21.5.1 图像Ping586
21.5.2 JSONP587
21.5.3 Comet588
21.5.4 服务器发送事件590
21.5.5 Web Sockets591
21.5.6 SSE与Web Sockets593
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 Processes612
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 Cookie629
23.3.2 IE用户数据637
23.3.3 Web存储机制638
23.3.4 IndexedDB643
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章 新兴的API682
25.1 requestAnimationFrame()682
25.1.1 早期动画循环682
25.1.2 循环间隔的问题683
25.1.3 mozRequestAnimation-Frame683
25.1.4 webkitRequestAnima-tionFrame与msRequest-AnimationFrame685
25.2 Page Visibility API686
25.3 Geolocation API687
25.4 File API689
25.4.1 FileReader类型690
25.4.2 读取部分内容692
25.4.3 对象URL693
25.4.4 读取拖放的文件694
25.4.5 使用XHR上传文件695
25.5 Web计时696
25.6 Web Workers697
25.6.1 使用Worker697
25.6.2 Worker全局作用域698
25.6.3 包含其他脚本699
25.6.4 Web Workers的未来700
25.7 小结700
附录A ECMAScript Harmony701
附录B 严格模式717
附录C JavaScript库723
附录D JavaScript工具727
文章试读:在HTML中使用JavaScript 本章内容 使用<script>元素 嵌入脚本与外部脚本 文档模式对JavaScript的影响 考虑禁用JavaScript的场景 只 要一提到把JavaScript放到网页中,就不得不涉及Web的核心语言——HTML。在当初开发JavaScript的时候,Netscape要解决的一个重要问题就是如何做到让JavaScript既能与...
(查看全部试读)