前言
目录
购买本书
(广告,请勿屏蔽。)

前言

由于 JavaScript 在网络和其他领域的流行,它已经变得不可避免。但这并不意味着它很受欢迎。通过这本书,我希望让你相信,虽然在使用 JavaScript 时你必须接受相当多的怪癖,但它是一门不错的语言,可以让你非常高效,而且编程也很有趣。

尽管我从 JavaScript 诞生之日起就一直在关注它的发展,但我花了很长时间才开始喜欢上它。然而,当我最终喜欢上它时,我发现我之前的经验已经为我做好了充分的准备,因为我曾经使用过 Scheme、Java(包括 GWT)、Python、Perl 和 Self(所有这些语言都对 JavaScript 产生过影响)。

2010 年,我了解到 Node.js,这让我看到了最终能够在服务器端和客户端都使用 JavaScript 的希望。因此,我转而将 JavaScript 作为我的主要编程语言。在学习它的过程中,我开始写一本书来记录我的发现。这就是你现在正在阅读的这本书。在我的博客上,我发表了本书的部分内容和其他关于 JavaScript 的资料。这在几个方面帮助了我:积极的反应鼓励我继续前进,并使写这本书不再那么孤独;对博客文章的评论为我提供了额外的信息和建议(本书中随处可见);它让人们了解了我的工作,最终促成了 O'Reilly 出版这本书。

因此,这本书的创作历时三年多。在这段漫长的酝酿期中,我不断完善其内容,这本书也从中受益匪浅。我很高兴这本书终于完成了,并希望人们会发现它对学习 JavaScript 有用。O'Reilly 已同意免费提供在线阅读,这将有助于让更广泛的读者能够阅读到它。

你需要了解的关于本书的信息

这本书适合你吗?以下几点可以帮助你做出判断

本书的目标读者

这本书是由程序员为程序员而写的。因此,为了理解它,你应该已经了解面向对象编程,例如,通过主流编程语言,如 Java、PHP、C++、Python、Ruby、Objective-C、C# 或 Perl。

因此,本书的目标读者是希望快速、正确地学习 JavaScript 的程序员,以及希望加深技能和/或查找特定主题的 JavaScript 程序员。

本书未涵盖的内容
本书侧重于 JavaScript 语言本身。例如,你不会找到关于 Web 浏览器编程的信息(DOM、异步编程等)。但是,第 33 章 指出了相关的资料。
本书的组织结构

本书分为四个部分,但主要的两个部分是

  • JavaScript 快速入门
  • JavaScript 深入

这两部分完全独立!你可以把它们当作两本独立的书:前者更像是一本指南,而后者更像是一本参考书。本书的四个部分 将向你详细介绍本书的结构。

本书使用的 JavaScript 版本
本书教授的是 ECMAScript 5,这是所有现代引擎都支持的 JavaScript 当前版本。如果你必须使用旧版本的 Web 浏览器,那么第 25 章 将解释哪些特性是 ECMAScript 5 独有的。

阅读本书的技巧

学习 JavaScript 最重要的技巧是不要被细节所困扰。是的,这门语言有很多细节,本书涵盖了其中的大部分。但我还会向你指出一个相对简单而优雅的“全局”。

本书的四个部分

本书分为四个部分

第一部分
这部分教你“基础 JavaScript”,它是 JavaScript 的一个子集,它尽可能的小,但仍然可以让你提高效率。这部分内容是独立的;它不依赖于其他部分,其他部分也不依赖于它。
第二部分
这部分将 JavaScript 置于历史和技术背景中:它是什么时候、为什么以及如何创建的?它与其他编程语言有什么关系?我们今天走到这一步的重要步骤是什么?
第三部分
这部分更像是一本参考书:找到你感兴趣的主题,深入研究,并进行探索。许多简短的例子可以防止内容过于枯燥。
第四部分
这部分提供了使用 JavaScript 的技巧:最佳实践、高级技术和学习资源。它还介绍了一些重要的工具和库。

JavaScript 命令行

在阅读本书时,你可能需要准备好一个命令行。 这允许你以交互方式尝试代码。最流行的选择是:

Node.js
Node.js 自带一个交互式命令行。 你可以通过调用 shell 命令 node 来启动它。
浏览器
所有主流浏览器都有控制台,用于输入将在当前页面的上下文中执行的 JavaScript 代码。 只需在线搜索你的浏览器名称和“控制台”即可。

符号约定

本书通篇使用以下符号约定。

描述语法

问号 (?) 用于标记可选参数。例如

parseInt(str, radix?)

法语引号(guillemets)表示元代码。你可以将此类元代码视为空白,由实际代码填充。例如

try {
    «try_statements»
}

“白色”方括号标记可选的语法元素。例如

break ⟦«label»⟧

在 JavaScript 注释中,我有时使用反引号来区分 JavaScript 和英语

foo(x, y); // calling function `foo` with parameters `x` and `y`

引用方法

我通过完整路径引用内置方法

«Constructor».prototype.«methodName»()

例如,Array.prototype.join() 指的是数组方法 join();也就是说,JavaScript 将 Array 实例的方法存储在对象 Array.prototype 中。其原因将在第 3 层:构造函数——实例的工厂中解释。

命令行交互

每当我介绍一个新概念时,我通常会通过 JavaScript 命令行中的交互来说明它。这看起来像这样:

> 3 + 4
7

大于号后面的文本是输入,由人键入。其他所有内容都是由 JavaScript 引擎输出的。此外,我使用 console.log() 方法将数据打印到控制台,尤其是在(非命令行)源代码中

var x = 3;
x++;
console.log(x); // 4

提示、注释和警告

提示

此元素表示提示或建议。

注释

此元素表示一般注释。

警告

此元素表示警告或注意。

快速查找文档

虽然你显然可以将本书用作参考,但有时在线查找信息更快。我推荐的一个资源是Mozilla 开发者网络 (MDN)。你可以在网上搜索 MDN 上的文档。 例如,以下网络搜索可以找到数组的 push() 方法的文档:

mdn array push

Safari® Books Online

注释

Safari Books Online 是一个按需提供的数字图书馆,提供来自全球领先的技术和商业作家的专家内容,包括书籍和视频形式。

技术专业人士、软件开发人员、网页设计师以及商业和创意专业人士将 Safari Books Online 作为他们研究、解决问题、学习和认证培训的主要资源。

Safari Books Online 为企业政府教育和个人提供一系列计划和价格

会员可以访问来自 O'Reilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett、Course Technology 以及更多出版商的数千本书籍、培训视频和出版前的手稿,这些内容都可以在一个完全可搜索的数据库中找到。有关 Safari Books Online 的更多信息,请访问我们的网站

如何联系我们

如有关于本书的意见和问题,请联系出版商

奥莱利媒体公司
格雷文斯坦公路北 1005 号
加利福尼亚州塞瓦斯托波尔 95472
800-998-9938(美国或加拿大境内)
707-829-0515(国际或本地)
707-829-0104(传真)

我们为本书创建了一个网页,其中列出了勘误表、示例以及任何其他信息。你可以访问以下页面:http://oreil.ly/speaking-js

要评论或提出有关本书的技术问题,请发送电子邮件至

有关我们书籍、课程、会议和新闻的更多信息,请访问我们的网站:http://www.oreilly.com

在 Facebook 上找到我们:http://facebook.com/oreilly

在 Twitter 上关注我们:http://twitter.com/oreillymedia

在 YouTube 上观看我们:http://www.youtube.com/oreillymedia

致谢

我要感谢以下所有帮助我完成这本书的人。

JavaScript 准备工作

以下人士为我对 JavaScript 的理解奠定了基础(按时间顺序排列)

  • François Bry 教授、Sven Panne 和 Tim Geisler(Scheme)
  • Don Batory 教授(技术写作、编程语言设计)
  • Martin Wirsing 教授、Alexander Knapp、Matthias Hölzl、Hubert Baumeister 以及慕尼黑大学信息学研究所的其他几位前同事(形式化方法、各种软件工程主题)

JavaScript 方面的帮助

es-discuss 邮件列表的参与者
他们的回答帮助我理解了 JavaScript 的设计。我非常感谢他们的耐心和不懈努力。其中有四个人脱颖而出:Brendan Eich、Allen Wirfs-Brock、Mark Miller 和 David Herman。
我博客2ality的读者
我在博客上发表了这本书的点点滴滴,并得到了大量有用的反馈。众多名字中的一部分:Ben Alman、Brandon Benvie、Mathias Bynens、Andrea Giammarchi、Matthias Reuter 和 Rick Waldron。

更多来源在各章中都有说明。

审阅者

我非常感谢以下审阅本书的人。他们提供了重要的反馈和更正。按字母顺序排列

  • Mathias Bynens
  • Raymond Camden
  • Cody Lindley
  • Shelley Powers
  • Andreas Schroeder
  • Alex Stangl
  • Béla Varga
  • Edward Yue Shung Wong
下一页:一、JavaScript 快速入门