
本书旨在介绍JavaScript基础知识,沿用经典的Step by Step风格,一次介绍一个知识点,并通过练习来加以巩固。这本实用教程提供了清楚的指导和动手实例,各章还提供练习题有利于读者使用JavaScript核心特性和技术创建或定制交互式app。
全书共4部分23章,主题涉及JavaScript基础知识,JavaScript的应用,JavaScript与设计的集成,AJAX和服务器端的集成,jQuery基础知识。本书特别针对初学者,在每一章设计了练习题和相应的答案,以帮助他们学以致用,迅速掌握JavaScript,提升编程技能。
前 言
自2007年本书第1版问世以来,很多事情已经发生改变:底层JavaScript规范得到了重大更新;微软发布了新版Internet Explorer和Windows;就像移动互联网的使用一样,Chrome浏览器走向成熟;现在,JavaScript开发框架已经成熟并无处不在。
《JavaScript 从入门到精通(第3版)》建立在前面两个版本的基础之上。虽然JavaScript语言的底层架构一直保持大致相同,但是随着年复一年的巨大增长以及对开发人员重要性的增加,JavaScript的使用已经变得无处不在。考虑到这一点,本书的布局和封皮也大致相同,只是有几个显著的例外:这一版更加重视JavaScript的事件处理以及jQuery的使用来加速开发。本书的最后一节是有关使用JavaScript的Windows 8开发的。不过,本书绝对不是以微软为中心的。
在接受编写本书的邀约之前,我询问的第一件事情是,是否必须专注于微软产品。答案是一个坚定的“不”。本书过去和现在都旨在成为一本普通的JavaScript使用教程,包括在网络上使用JavaScript的最佳实践。
微软对本书的最大影响是,当涉及IE时能够确定我在使用术语“Internet Explorer” 。纵观全书,你会发现这里没有任何偏见,书中包含的练习显示纯文本编辑器,而不是笨重的开发工具。虽然事实上大部分的屏幕截图显示Internet Explorer (我差不多都说IE),而且代码跨多个浏览器测试(比如,Chrome和Firefox),但事实证明很难获得其他浏览器屏幕截图的法律许可。实际上,本书的大部分代码是在Vim上编写的,在一个运行Apache的Debian Linux系统上访问,并且在跨浏览器测试之前先在Firefox上运行,然后设置为屏幕截图。
纵观全书,在JavaScript的最新版中会发现一些亮点以及新增功能。同时,书中所用示例也接受了更严格的审查,使用多种浏览器来反映当今网络现状。早期版本的读者反馈在本版内容中有所反映,并且是添加jQuery以及强调事件处理的推动力。
撇开内务处理不谈,本书介绍了JavaScript,包括一些核心功能以及诸如异步JavaScript和XML(AJAX)的功能和范例。
本书的第I部分介绍JavaScript并且帮助你开始开发JavaScript应用程序。对于JavaScript开发,不需要任何特殊工具,因此你将看到如何在Microsoft Visual Studio、Eclipse,甚至Notepad (或者任何其他文本编辑器)中创建JavaScript文件。本书探讨JavaScript的功能,在浏览器中使用JavaScript以及前面提到的的jQuery。最后,本书还涵盖了使用HTML、CSS以及JavaScript开发Windows 8应用程序。
谁应该阅读本书
本书写给初学JavaScript的程序员,或者对学习现代JavaScript编程基本原理感兴趣的人:该语言的语法,如何在浏览器上工作?常见的跨浏览器问题是什么?如何利用AJAX 和第三方库(如jQuery)来为Web页面增加交互性?
前提
本书预期你至少对围绕Web开发的概念有一点理解。至少应该对HTML比较熟悉,了解CSS也非常有帮助,但是HTML和CSS都不是完成本书学习的必备知识。只要有必要,所示例子都提供所有的HTML和CSS。
谁不应该阅读本书
本书不是针对有经验的JavaScript程序员的。
本书的组织
本书分为四个部分,每个部分侧重于JavaScript编程的不同方面。第Ⅰ部分提供JavaScript编程的基础。这部分包含快速创建JavaScript程序的章节以及讨论JavaScript语法的章节。第Ⅱ部分仔细审视JavaScript和它作为Web编程基本角色之间的交互。第Ⅲ部分展示使用JavaScript检索并解析来自Web服务的信息。最后,第Ⅳ部分,展示如何使用HTML、CSS以及JavaScript创建Windows 8应用程序。
本书约定和特点
本书一步一步地带领你学习JavaScript编程语言。从本书的第一页开始,学习每一个例子和练习,可以充分帮助你获取有关JavaScript编程语言的知识。
如果你对JavaScript已经有一些了解,可以尝试跳过本书的第1章。然而,第1章详细介绍了JavaScript的一些历史背景以及本书的一些基本前提,它们都有助于理解本书剩余部分的讨论。第2章告诉你如何开始JavaScript编程。如果你已经熟悉Web开发,那么可能已经有了一个Web应用,因此你可能想跳过第2章。尽管如此,你应该熟悉第2章中用来创建JavaScript应用的模式。
本书目录可以帮助你快速找到具体章节。每章都包含一个内容详细的列表。
对Windows 8应用程序开发的介绍只安排在本书的最后一部分,所以,如果你对创建Windows 8应用程序(实际上非常简单)没有兴趣,那么可以安全地跳过最后一部分,不会漏掉任何对Web的JavaScript编程必需的有价值的信息。
此外,还能够下载书中很多示例的源代码。
系 统 要 求
完成本书中的练习需要如下硬件和软件:
* 能够运行Web服务器的操作系统。对于Windows 8开发,需要Windows 8,不过,其他例子不需要Windows。
* 文本编辑器,比如记事本、Vim或者一个集成开发环境(IDE),如Visual Studio 或 Eclipse。对于Windows 8开发,将特别需要Windows的Visual Studio 2012。
* 互联网连接,以便可以下载软件以及示例。
代 码 示 例
本书的大部分章节都包含练习题,可以让你交互式地尝试正文中学到的知识。这些练习的代码以及很多其他示例都可以从以下网站下载:
http://aka.ms/JavaScriptSbS/files
按照说明下载9780735665934_files文件即可。
安装代码示例
按照这些步骤在计算机上安装代码示例,使用它们来完成书中练习。
1. 将从本书网站上下载的9780735665934_files.zip文件解压缩到Web服务器可以访问的位置。
2. 如果出现提示,查看显示的终端用户许可协议。如果接受这些条款,请选择“接受”选项,然后单击“下一步”按钮。
说明 如果许可协议不出现,那么可以从下载9780735665934_files.zip文件的同一个网页访问它。
使用代码示例
解压缩示例代码创建几个子文件夹,书中的每一章各对应一个。根据给定章节所需要的布局,这些子文件夹可以包含额外的子文件夹。
致 谢
在本书的写作过程中有太多的人提供帮助。我首先要感谢的是微软出版社的Russell Jones。他提供了很好的指导,与他一起工作总是很愉快。感谢John Grieb为本版提供了卓越的技术反馈。如果没有其他原因,我还要感谢Jim Oliva和John Eckendorf,就像我在我写的其他书中所做的那样。
我还想感谢Terry Rapp,因为他了解我的日程安排冲突。感谢 Chris Tuescher 几年来的友谊和支持。这些年很多人都帮助过我,所以我得在此有所表示。感谢Duff Damos、Kent Laabs、Pat Dunn以及Nightmare制作有限公司和Capitol Entertainment的工作人员。感谢Dave、Sandy、Joel以及Ski团队,还要感谢Mehlberg夫人和Jurgella夫人的额外关注。
最后,感谢您,亲爱的读者。这本书非常成功(至少按我的标准是这样),多年来您的反馈和联系一直都很有帮助。请到Twitter@stevesuehring关注我或者访问我的网站http:// www.braingia.org,给我写信。
勘误表和图书支持
我们已经尝试各种努力来保证本书以及随书内容的准确性。 自本书出版以来所报告的所有错误都列在我们在Oreilly.com的微软出版社网站:
http://aka.ms/JavaScriptSbS/errata
如果您发现尚未列出的错误,可以通过这一页面向我们报告。如果需要额外帮助,可以给微软出版社图书支持mspinput@microsoft.com发邮件。
请注意,上述地址不提供对微软软件产品的支持。
倾听您的心声
在微软出版社,读者的满意是我们的首要任务,读者的反馈是我们最宝贵的财富。请告诉我们您对本书的看法:
http://www.microsoft.com/learning/booksurvey
这项调查很短,我们会阅读每个人的意见和想法。提前感谢您的参与!
保持联系
让我们继续交流!我们的Twitter主页:http://twitter.com/MicrosoftPress
IV
JavaScript从入门到精通(第3版)
V
目 录
第I部分 Java啥?JavaScript的用处、优势和用法
第1章 JavaScript超乎你的想象 3
1.1 JavaScript简史 3
1.1.1 Internet Explorer 3.0 4
1.1.2 ECMAScript 4
1.1.3 标准多多 5
1.1.4 DOM 5
1.2 JavaScript程序的组成 6
1.3 把JavaScript放到网页上 7
1.4 JavaScript能够做什么 9
1.5 JavaScript不能做什么 9
1.5.1 JavaScript不能强加于客户端 9
1.5.2 JavaScript无法保证数据
安全性 10
1.5.3 JavaScript不能跨域 10
1.5.4 JavaScript不能充当服务器 10
1.6 JavaScript使用提示 11
1.6.1 JavaScript适用于哪些场景 12
1.6.2 网站要支持哪些浏览器 13
1.6.3 Windows 8登场 14
练习题 14
第2章 使用JavaScript开发 15
2.1 JavaScript开发选择 15
2.2 配置环境 16
2.3 使用Visual Studio 2010编写
JavaScript 16
2.3.1 使用Visual Studio 2012的第一个web(和JavaScript)项目 17
2.3.2 在Visual Studio 2012中使用
外部JavaScript文件 20
2.4 使用Eclipse编写JavaScript 23
2.4.1 使用Eclipse开发第一个web
(和JavaScript) 项目 23
2.4.2 在Eclipse内使用外部
JavaScript文件 27
2.5 不使用IDE编写JavaScript 30
2.5.1 使用Notepad的第一个web
(和JavaScript)项目 30
2.5.2 在没有IDE的情况下使用
外部JavaScript文件 32
2.6 调试JavaScript 33
练习题 34
第3章 JavaScript的语法和语句 35
3.1 一些常识 35
3.1.1 区分大小写 35
3.1.2 空白 35
3.1.3 注释 36
3.1.4 分号 37
3.1.5 换行 38
3.1.6 正确放置JavaScript 38
3.2 JavaScript语句 39
3.2.1 语句中有什么 39
3.2.2 JavaScript语句的两种类型 40
3.3 JavaScript中的保留字 40
3.4 函数简介 41
3.5 JavaScript的严格模式 43
练习题 44
第4章 使用变量和数据类型 45
4.1 JavaScript中的数据类型 45
4.1.1 数字 45
4.1.2 字符串的用法 50
4.1.3 布尔值 52
4.1.4 未定义 53
4.1.5 对象 53
4.1.6 数组 54
4.2 定义和使用变量 54
4.2.1 声明变量 55
4.2.2 变量类型 55
4.2.3 变量作用域 55
4.2.4 Date对象 61
4.3 使用RegExp对象 68
4.3.1 正则表达式的语法 69
4.3.2 引用和垃圾回收机制 73
4.4 学习类型转换 74
4.4.1 数字转换 74
4.4.2 字符串转换 74
4.4.3 布尔值转换 75
练习题 75
第5章 使用操作符和表达式 76
5.1 操作符 76
5.2 加法操作符 76
5.3 乘法操作符 77
5.4 位操作符 77
5.5 相等操作符 78
5.6 关系操作符 80
5.6.1 in操作符 80
5.6.2 instanceof 操作符 81
5.7 一元操作符 81
5.7.1 自增和自减 82
5.7.2 使用加号转换成数字 82
5.7.3 使用减号创建负数 82
5.7.4 按位求反和逻辑非 82
5.7.5 使用delete操作符 83
5.7.6 使用typeof操作符返回变量
类型 84
5.8 赋值操作符 85
字节节省(又名缩小)的重要性 86
5.9 逗号操作符 86
练习题 87
第6章 条件和循环控制流 88
6.1 if语句的用法 88
6.1.1 if 语句的语法 88
6.1.2 Internet Explorer中的prompt()
函数 90
6.1.3 复合条件 92
6.2 使用else if语句和else语句 94
6.3 三元条件语句 98
6.4 使用switch测试 98
6.5 while循环 100
6.5.1 while 语句 100
6.5.2 do...while语句 101
6.6 使用for循环 102
6.6.1 for循环 103
6.6.2 for...in 循环 104
6.6.3 for each...in 循环 106
6.7 使用条件语句验证表单 107
练习题 109
第7章 使用函数 110
7.1 函数的组成 110
7.1.1 函数参数 110
7.1.2 再探变量作用域 112
7.1.3 返回值 113
7.1.4 函数调用的更多内容 114
7.1.5 匿名/无名函数(函数
直接量) 116
7.1.6 闭包 116
7.2 方法 117
7.3 对话框函数概览 117
练习题 121
第8章 JavaScript中的对象 122
8.1 面向对象开发 122
8.1.1 对象 122
8.1.2 属性 122
8.1.3 方法 123
8.1.4 类 123
8.2 创 建 对 象 126
8.2.1 为对象添加属性 126
8.2.2 为对象添加方法 129
8.3 数组详解 129
8.3.1 length属性 130
8.3.2 数组方法 130
8.4 利用内建对象 136
8.4.1 使URI更安全 136
8.4.2 使用eval()方法 136
练习题 137
第9章 浏览器对象模型 138
9.1 浏览器简介 138
9.1.1 浏览器层级 138
9.1.2 事件 139
9.3 获取屏幕信息 141
9.4 使用navigator对象 142
9.5 location对象 146
9.6 history对象 152
练习题 153
第10章 JavaScript库与框架 154
10.1 了解编程库 154
10.2 定义自己的JavaScript库 154
10.3 纵观流行的JavaScript库和框架 155
10.3.1 jQuery 155
10.3.2 Modernizr 156
10.3.3 Yahoo! 用户接口 156
10.3.4 MooTools 156
10.3.5 其他库 156
练习题 156
第11章 jQuery 157
11.1 jQuery入门 157
11.2 使用jQuery 157
11.2.1 两种jQuery下载 157
11.2.2 包含jQuery 158
11.2.3 基本的jQuery语法 158
11.2.4 将jQuery连接到load
事件 159
11.3 使用选择器 160
11.3.1 根据ID选择元素 160
11.3.2 根据类选择元素 161
11.3.3 根据类型选择元素 161
11.3.4 根据层级选择元素 161
11.3.5 根据位置选择元素 162
11.3.6 根据属性选择元素 164
选择表单元素 165
11.3.8 更多选择器 165
11.4 函数 166
11.4.1 遍历DOM 166
11.4.2 操作属性 170
11.4.3 修改文档和HTML 170
11.4.4 插入元素 171
11.4.5 回调函数 172
11.5 更多jQuery参考资源 172
练习题 173
第II部分 将JavaScript集成到设计
第12章 文档对象模型 177
12.1 文档对象模型 177
12.1.1 DOM层级0:遗留DOM 177
12.1.2 DOM层级1到3 178
12.1.3 把DOM看作一颗树 178
12.1.4 操作节点 179
12.2 获取元素 179
12.2.1 通过ID获取元素 179
12.2.2 通过标签名获取 183
12.2.3 HTML集合 185
12.2.4 处理兄弟节点 185
12.3 操作属性 186
12.3.1 查看属性 186
12.3.2 设置属性 188
12.4 创建元素 190
12.4.1 添加文本 190
12.4.2 添加元素并设置ID 191
12.5 删除元素 191
练习题 194
第13章 JavaScript事件和浏览器 195
13.1 了解Window事件 195
13.1.1 事件模型 195
13.1.2 通用事件处理程序 198
13.1.3 jQuery事件处理 200
13.1.4 绑定和解除绑定 200
13.2 检测访问者信息 201
13.2.1 userAgent属性简介 202
13.2.2 功能测试 202
13.2.3 让JavaScript远离早期的
浏览器 203
13.2.4 其他navigator属性和方法 205
13.3 打开、关闭和调整窗口大小 205
13.3.1 打开窗口最佳实践 206
13.3.2 打开标签:无需JavaScript 207
13.3.3 调整和移动窗口 207
13.4 定时器 208
13.5 事件 210
13.5.1 鼠标事件和悬停 210
13.5.2 事件处理程序更多参考 211
练习题 211
第14章 在JavaScript中操作图像 212
14.1 操作图像悬停 212
14.1.1 一个简单的悬停 212
14.1.2 使用jQuery的现代悬停 213
14.1.3 仔细观察前面的练习 216
14.2 预加载图像 218
14.3 操作滚动放映 220
14.3.1 创建一个滚动放映 220
14.3.2 向后移动 222
14.3.3 jQuery滚动放映 225
14.4 操作图像映射 227
练习题 230
第15章 结合web表单使用
JavaScript 231
15.1 JavaScript和web表单 231
15.1.1 使用JavaScript验证 231
15.1.2 使用jQuery验证 234
15.2 使用表单信息 235
15.2.1 使用选择框 235
15.2.2 使用复选框 239
15.2.3 使用单选按钮 241
15.3 预先验证表单数据 242
15.3.1 绕过JavaScript 验证 243
15.3.2 验证文本字段 246
练习题 247
第16章 JavaScript和CSS 248
16.1 CSS是什么 248
16.1.1 使用属性和选择器 249
16.1.2 应用CSS 250
16.2 JavaScript和CSS之间的关系 250
16.2.1 通过ID设置元素样式 251
16.2.2 根据类型设置元素样式 254
16.2.3 使用JavaScript设置
CSS类 256
16.2.4 使用JavaScript获取元素
样式 257
练习题 258
第17章 jQuery效果和插件 259
17.1 安装jQuery UI 259
17.1.1 获得jQuery UI 259
17.1.2 安装jQuery UI 259
17.1.3 构建一个jQuery UI
演示页 260
17.2 创建一个jQuery UI日历 264
自定义日历 266
17.3 添加一个对话框 268
17.3.1 创建模式对话框 269
17.3.2 添加按钮 270
17.4 JQuery UI更多参考资源 272
练习题 273
第18章 使用jQuery Mobile进行
移动开发 274
18.1 jQuery Mobile入门 274
18.2 获取jQuery Mobile 276
18.2.1 下载jQuery Mobile 276
18.2.2 测试 jQuery Mobile 278
18.3 jQuery Mobile的链接 279
18.3.1 创建一个链接 280
18.3.2 改变页面过渡 281
18.3.3 没有AJAX的链接 281
18.4 使用工具栏增强页面 283
18.4.1 添加导航栏 283
18.4.2 添加页脚导航栏 284
18.4.3 将按钮添加到工具栏 286
18.4.4 其他工具栏增强 287
18.5 jQuery Mobile更多参考 289
练习题 290
第19章 获取数据到JavaScript 291
19.1 JavaScript应用程序的架构 291
19.2 JavaScript和界面 292
19.3 AJAX简介 293
19.4 使用jQuery的AJAX 293
19.5 没有X的AJAX 294
19.6 下一步是什么 295
第III部分 AJAX和服务器端集成
第20章 使用AJAX 299
20.1 XMLHttpRequest对象 299
20.1.1 实例化XMLHttpRequest
对象 299
20.1.2 发送AJAX请求 301
20.1.3 处理AJAX响应 302
20.1.4 处理XML响应 306
20.1.5 使用JSON 307
20.1.6 处理头部 308
20.1.7 使用POST方法 309
20.2 AJAX和jQuery 311
20.2.1 AJAX错误和超时 313
20.2.2 发送数据到服务器 314
20.2.3 其他重要选项 314
练习题 314
第21章 开发Windows 8 app 315
21.1 Windows 8应用 315
21.2 开发Windows 8 app 315
21.3 发行Windows app 319
21.3.1 在Windows商店中发行 319
21.3.2 在企业内发行 320
小结 320
第IV部分 JavaScript和Windows 8
第22章 使用Visual Studio开发
Windows 8 App 323
22.1 安装Visual Studio 2012 323
22.2 为Windows 8安装Visual Studio
2012 Express 324
22.3 Windows 8 app模板 329
22.3.1 Blank App模板 330
22.3.2 Grid App模板 333
22.3.3 Split App模板 334
22.4 在App清单中设置App细节 335
22.5 为Windows商店打包App 336
22.5.1 认证要求 336
22.5.2 我如何赚钱 337
22.5.3 技术过程 337
练习题 337
第23章 创建Windows App 338
23.1 App开发过程 338
23.2 开始App设计和编程 339
23.3 自定义App 341
23.3.1 自定义JavaScript 341
23.3.2 自定义主要的HTML文件 345
23.3.3 自定义详细HTML 346
23.3.4 自定义CSS 348
23.3.5 定型App 349
23.4 自定义软件包清单 351
23.4.1 添加启动画面、标志
和贴片图像 351
23.4.2 定义功能 351
23.5 测试 352
小结 355
附录 练习题答案 357
XII
JavaScript从入门到精通(第3版)
XI