零、序言

JavaScript 作为一种脚本语言诞生于浏览器战争最不恰当的时期。它被忽视和误解了十年,经历了六次版本。现在看看它!JavaScript 已经成为主流编程语言。它在任何地方都取得了进步:大规模客户端开发、服务器脚本编写、桌面应用、本机移动编程、游戏开发、数据库查询、硬件控制和操作系统自动化。JavaScript 获得了许多子集,如 Objective-J、CoffeeScript、TypeScript 等。JavaScript 非常简洁,是一种富有表现力的语言。它的特点是基于原型的 OOP、对象组合和继承、可变函数、事件驱动编程和非阻塞 I/O。然而,要利用 JavaScript 的真正功能,我们需要对语言怪癖有深入的理解。此外,在使用 JavaScript 进行开发时,我们会意识到它的许多缺陷,我们需要一些技巧来避免它们。以前称为 EcmaScript Harmony 的项目最近刚刚在名为 EcmaScript 2015 的规范中完成,该规范通常被称为 ES6。这不仅将语言提升到了一个新的水平,还引入了一些需要关注的新技术。

本书旨在指导读者理解 JavaScript 即将推出和现有的特性。它充满了解决常见编程任务的代码配方。这些任务提供了经典 JavaScript(ES5)和下一代语言(ES6-7)的解决方案。本书不仅关注浏览器语言,还提供了为桌面应用、服务器端软件和本机模块应用编写高效 JavaScript 的要点。作者的最终目标不仅是描述该语言,还帮助读者改进代码,以获得更好的可维护性、可读性和性能。

这本书涵盖的内容

第一章深入 JavaScript 核心,讨论了提高代码表达能力、掌握多行字符串和模板、操作数组和类似数组的对象的技术。本章解释了如何利用 JavaScript 原型而不损害代码的可读性。此外,本章还介绍了 JavaScript 的“神奇方法”,并给出了它们的实际使用示例。

第 2 章使用 JavaScript进行模块化编程,描述了 JavaScript 中的模块性:模块是什么,为什么它们很重要,异步和同步加载模块的标准方法,以及 ES6 模块是什么。本章介绍如何在服务器端 JavaScript 中使用 CommonJS 模块,以及如何预编译这些模块以便在浏览器中使用。它详细阐述了如何将异步和同步方法结合起来以实现更好的应用性能。它还解释了如何通过 Babel.js 为生产填充 ES6 模块。

第 3 章DOM 脚本和 AJAX介绍了文档对象模型(DOM),展示了在使用 DOM 操作时最小化浏览器回流、提高应用性能的最佳实践。本章还比较了两种客户机-服务器通信模型:XHR 和 Fetch API。

第 4 章HTML5 API考虑了浏览器的持久化 API,如 Web 存储、IndexDB 和文件系统。它介绍了 Web 组件,并介绍了如何创建自定义组件。本章介绍服务器到浏览器的通信 API,如 SSE 和 WebSocket。

第 5 章异步 JavaScript解释了 JavaScript 的非阻塞性,详细阐述了事件循环和调用堆栈。本章讨论链接异步调用和处理错误的流行样式。本文介绍了 ES7 的异步/等待技术,并给出了使用 Promise API 和 async.js 库并行和顺序运行任务的示例。它描述了节流和去抖动的概念。

第 6 章大规模 JavaScript 应用架构,重点关注代码可维护性和架构。本章介绍了 MVC 范式及其衍生产品 MVP 和 MVVM。它还通过示例展示了在诸如 Backbone.js、AngularJS 和 ReactJS 等流行框架中如何实现关注点分离。

第 7 章浏览器之外的 JavaScript介绍了如何用 JavaScript 编写命令行程序,以及如何用 Node.js 构建 web 服务器。它还包括使用 NW.js 创建桌面 HTML5 应用,并指导使用 Phongap 开发本机移动应用。

第 8 章调试和评测深入到错误检测和隔离。它检查了 DevTools 的功能和 JavaScript 控制台 API 的鲜为人知的特性。

这本书你需要什么

如果你有一个现代化的浏览器和一个文本编辑器来运行书中的示例,这就足够了。不过,使用类似于 Firefox Scratchpad(的浏览器工具可能会有所帮助 https://developer.mozilla.org/en-US/docs/Tools/Scratchpad )直接在浏览器中编辑样本代码。这些书还包含 ES6/ES7 代码示例,这些示例依赖于浏览器中尚未提供的功能。您可以在 Babel.js 的在线沙箱中运行这些示例,该沙箱位于https://babeljs.io/repl/

在我们提到 Node.js、NW.js、PhoneGap、JavaScript 框架和 NPM 包的章节中,您将找到关于如何设置开发环境和安装所需工具和依赖项的详细说明。

这本书是给谁的

这本书是为那些已经熟悉 JavaScript 并希望提高技能以充分利用该语言的开发人员准备的。这本书以实践为导向,对于那些习惯于“边做边学”的人来说是很有帮助的,因为这些主题都包含了真实生活中的例子和教程。

公约

在本书中,您将发现许多文本样式可以区分不同类型的信息。下面是这些风格的一些例子,并解释了它们的含义。

文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄如下所示:“我们可以通过使用include指令来包含其他上下文。”

代码块设置如下:

var res = [ 1, 2, 3, 4 ].filter(function( v ){
 return v > 2;
})
console.log( res ); // [3,4]

当我们希望提请您注意代码块的特定部分时,相关行或项目以粗体显示:

/**
* @param {Function} [cb] - callback
*/
function fn( cb ) {
 cb && cb();
};

任何命令行输入或输出的编写方式如下:

npm install fs-walk cli-color

新术语重要词语以粗体显示。您在屏幕上看到的文字(例如,在菜单或对话框中)出现在文本中,如下所示:“只要按下Enter,控制台就会输出我正在运行。”

警告或重要注释显示在这样的框中。

提示

提示和技巧如下所示。

读者反馈

我们欢迎读者的反馈。让我们知道你对这本书的看法你喜欢还是不喜欢。读者反馈对我们来说很重要,因为它可以帮助我们开发出您将真正从中获得最大收益的标题。

要向我们发送总体反馈,只需发送电子邮件<[feedback@packtpub.com](mailto:feedback@packtpub.com)>,并在邮件主题中提及该书的标题。

如果您对某个主题有专业知识,并且您有兴趣撰写或贡献一本书,请参阅我们的作者指南www.packtpub.com/authors

客户支持

既然您是一本 Packt 图书的骄傲拥有者,我们有很多东西可以帮助您从购买中获得最大收益。

下载示例代码

您可以从您的账户下载示例代码文件 http://www.packtpub.com 对于您购买的所有 Packt 发布书籍。如果您在其他地方购买了本书,您可以访问http://www.packtpub.com/support 并注册,将文件直接通过电子邮件发送给您。

勘误表

虽然我们已尽一切努力确保内容的准确性,但错误确实会发生。如果您在我们的一本书中发现错误,可能是文本或代码中的错误,如果您能向我们报告,我们将不胜感激。通过这样做,您可以使其他读者免于沮丧,并帮助我们改进本书的后续版本。如果您发现任何错误,请访问进行报告 http://www.packtpub.com/submit-errata ,选择您的书籍,点击勘误表提交表链接,输入您勘误表的详细信息。一旦您的勘误表得到验证,您的提交将被接受,勘误表将上载到我们的网站或添加到该标题勘误表部分下的任何现有勘误表列表中。

要查看之前提交的勘误表,请转至https://www.packtpub.com/books/content/support 并在搜索字段中输入图书名称。所需信息将出现在勘误表部分下。

盗版

在互联网上盗版版权材料是所有媒体都面临的一个持续问题。在 Packt,我们非常重视版权和许可证的保护。如果您在互联网上发现任何形式的非法复制品,请立即向我们提供地址或网站名称,以便我们采取补救措施。

请致电<[copyright@packtpub.com](mailto:copyright@packtpub.com)>与我们联系,并提供可疑盗版材料的链接。

我们感谢您在保护我们的作者方面提供的帮助以及我们为您带来有价值内容的能力。

问题

如果您对本书的任何方面有任何问题,可以通过<[questions@packtpub.com](mailto:questions@packtpub.com)>与我们联系,我们将尽力解决该问题。