前言

前言

关于 JavaScript,谷歌公司的一位技术经理曾经跟我分享过一个无法反驳的观点。他说 JavaScript 并不是一门真正有内聚力的编程语言,至少形式上不是。ECMA-262 规范定义了 JavaScript,但 JavaScript 没有唯一正确的实现。更重要的是,这门语言与其宿主关系密切。实际上宿主为 JavaScript 定义了与外界交互所需的全部 API:DOM、网络请求、系统硬件、存储、事件、文件、加密,还有数以百计的其他 API。各种浏览器及其 JavaScript 引擎都按照自己的理解实现了这些规范。Chrome 有 Blink/V8,Firefox 有 Gecko/SpiderMonkey,Safari 有 WebKit/JavaScriptCore,微软有 Trident/EdgeHTML/Chakra。浏览器以合规的方式运行绝大多数 JavaScript,但 Web 上随处可见迎合各种浏览器偏好的页面。因此,对 JavaScript 更准确的定位应该是一组浏览器实现。

Web 纯化论者可能认为 JavaScript 本身并非网页不可或缺的部分,但他们必须承认,如果没有 JavaScript,那么现代 Web 势必发生严重倒退。毫不夸张地讲,JavaScript 才是真正不可或缺的。如今,手机、计算机、平板设备、电视、游戏机、智能手表、冰箱,甚至连汽车都内置了可以执行 JavaScript 代码的 Web 浏览器。地球上有近 30 亿人在使用安装了 Web 浏览器的智能手机。这门语言迅速发展的社区催生了大量高质量的开源项目。浏览器也已经支持模拟原生移动应用程序的 API。Stack Overflow 2019 年的开发者调查显示,JavaScript 连续 7 年位于最流行编程语言榜首。

我们正迎来 JavaScript 的复兴。

本书将从 JavaScript 的起源讲起,从最初的 Netscape 浏览器直到今天各家浏览器支持的让人眼花缭乱的技术。全书对大量高级技术进行了鞭辟入里的剖析,以确保读者真正理解这些技术并掌握它们的应用场景。简而言之,通过学习本书,读者可以透彻地理解如何选择恰当的 JavaScript 技术,以解决现实开发中遇到的业务问题。

读者对象

本书适合以下读者阅读。

  • 有经验的开发者,熟悉面向对象编程,因为 JavaScript 与 Java 和 C++等传统面向对象(OO,object oriented)语言的关系而希望学习 JavaScript。
  • Web 应用程序开发者,希望增强自己的网站或 Web 应用程序的易用性。
  • 初级 JavaScript 开发者,希望更好地理解这门语言。

此外,熟悉以下相关技术对阅读本书非常有帮助。

  • Java
  • PHP
  • Python
  • Ruby
  • Golang
  • HTML
  • CSS

本书内容

本书第 4 版全面深入地介绍了 JavaScript 开发者必须掌握的前端开发技术,涉及 JavaScript 的基础特性和高级特性。

本书从 JavaScript 的起源开始,逐步讲解到今天的最新技术。书中详尽讨论了 JavaScript 的各个方面,重点介绍 ECMAScript 和 DOM 标准。

在此基础上,接下来的各章揭示了 JavaScript 的基本概念,包括类、期约、迭代器、代理,等等。另外,书中还深入探讨了客户端检测、事件、动画、表单、错误处理及 JSON。

本书最后介绍近几年来涌现的最新和最重要的规范,包括 Fetch API、模块、工作者线程、服务线程以及大量新 API。

组织结构

本书包含如下这些章。

第 1 章,介绍 JavaScript 的起源:从哪里来,如何发展,以及现今的状况。这一章会谈到 JavaScript 与 ECMAScript 的关系、DOM、BOM,以及 Ecma 和 W3C 相关的标准。

第 2 章,了解 JavaScript 如何与 HTML 结合来创建动态网页,主要介绍在网页中嵌入 JavaScript 的不同方式,还有 JavaScript 的内容类型及其与<script>元素的关系。

第 3 章,介绍语言的基本概念,包括语法和流控制语句;解释 JavaScript 与其他类 C 语言在语法上的异同点。在讨论内置操作符时也会谈到强制类型转换。此外还将介绍所有的原始类型,包括 Symbol

第 4 章,探索 JavaScript 松散类型下的变量处理。这一章将涉及原始类型与引用类型的不同,以及与变量有关的执行上下文。此外,这一章也会讨论 JavaScript 中的垃圾回收,涉及在变量超出作用域时如何回收内存。

第 5 章,讨论 JavaScript 所有内置的引用类型,如 DateRegexp、原始类型及其包装类型。每种引用类型既有理论上的讲解,也有相关浏览器实现的剖析。

第 6 章,继续讨论内置引用类型,包括 ObjectArrayMapWeakMapSetWeakSet 等。

第 7 章,介绍 ECMAScript 新版中引入的两个基本概念:迭代器和生成器,并分别讨论它们最基本的行为和在当前语言环境下的应用。

第 8 章,解释如何在 JavaScript 中使用类和面向对象编程。首先会深入讨论 JavaScript 的 Object 类型,进而探讨原型式继承,接下来全面介绍 ES6 类及其与原型式继承的紧密关系。

第 9 章,介绍两个紧密相关的概念:Proxy(代理)和 Reflect(反射) API。代理和反射用于拦截和修改这门语言的基本操作。

第 10 章,探索 JavaScript 最强大的一个特性:函数表达式,主要涉及闭包、this 对象、模块模式,创建私有对象成员、箭头函数、默认参数和扩展操作符。

第 11 章,介绍两个紧密相关的异步编程构造:Promise 类型和 async/await。这一章讨论 JavaScript 的异步编程范式,进而介绍期约(promise)与异步函数的关系。

第 12 章,介绍 BOM,即浏览器对象模型,跟与浏览器本身交互的 API 相关。所有 BOM 对象都会涉及,包括 windowdocumentlocationnavigatorscreen 等。

第 13 章,解释检测客户端机器及其能力的不同手段,包括能力检测和用户代理字符串检测。这一章讨论每种手段的优缺点,以及适用的场景。

第 14 章,介绍 DOM,即文档对象模型,主要是 DOM Level 1 定义的 API。这一章将简单讨论 XML 及其与 DOM 的关系,进而全面探索 DOM 以及如何利用它操作网页。

第 15 章,解释其他 DOM API,包括浏览器本身对 DOM 的扩展,主要涉及 Selectors API、Element Traversal API 和 HTML5 扩展。

第 16 章,在之前两章的基础上,解释 DOM Level 2 和 Level 3 对 DOM 的扩展,包括新增的属性、方法和对象。这一章还会介绍 DOM4 的相关内容,比如 Mutation Observer。

第 17 章,解释事件在 JavaScript 中的本质,以及事件的起源及其在 DOM 中的运行方式。

第 18 章,围绕<canvas>标签讨论如何创建动态图形,包括 2D 和 3D 上下文(WebGL)等动画和游戏开发所需的基础。这一章还会讨论 WebGL1 和 WebGL2。

第 19 章,探索使用 JavaScript 增强表单交互及突破浏览器限制,主要讨论文本框、选择框等表单元素及数据验证和操作。

第 20 章,介绍各种 JavaScript API,包括 Atomics、Encoding、File、Blob、Notifications、Streams、 Timing、Web Components 和 Web Cryptography。

第 21 章,讨论浏览器如何处理 JavaScript 代码中的错误及几种错误处理方式。这一章同时介绍了每种浏览器的调试工具和技术,包括简化调试过程的建议。

第 22 章,介绍通过 JavaScript 读取和操作 XML 数据的特性,解释了不同浏览器支持特性和对象的差异,提供了简化跨浏览器编码的建议。这一章也讨论了使用 XSLT 在客户端转换 XML 数据。

第 23 章,介绍作为 XML 替代的 JSON 数据格式,还讨论了浏览器原生解析和序列化 JSON,以及使用 JSON 时要注意的安全问题。

第 24 章,探讨浏览器请求数据和资源的常用方式,包括早期的 XMLHttpRequest 和现代的 Fetch API。

第 25 章,讨论应用程序离线时在客户端机器上存储数据的各种技术。先从 cookie 谈起,然后讨论 Web Storage 和 IndexedDB。

第 26 章,介绍模块模式在编码中的应用,进而讨论 ES6 模块之前的模块加载方式,包括 CommonJS、 AMD 和 UMD。最后介绍新的 ES6 模块及其正确用法。

第 27 章,深入介绍专用工作者线程、共享工作者线程和服务工作者线程。其中包括工作者线程在操作系统和浏览器层面的实现,以及使用各种工作者线程的最佳策略。

第 28 章,探讨在企业级开发中进行 JavaScript 编码的最佳实践。其中提到了提升代码可维护性的编码惯例,包括编码技巧、格式化及通用编码建议。深入讨论应用性能和提升速度的技术。最后介绍与上线部署相关的话题,包括项目构建流程。

预备条件

要运行本书示例代码,需要如下条件。

  • 现代操作系统,包括 Windows、Linux、Mac OS、Android 或 iOS。
  • 现代浏览器,如 IE11+、Edge 12+、Firefox 26+、Chrome 39+、Safari 10+、Opera 26+或 iOS Safari 10+。

本书完整的源代码可以扫描封底二维码,可以下载本书源代码,并加入图灵前端研发小组。1

1读者也可访问本书图灵社区页面(https://www.ituring.com.cn/book/2472)下载本书配套学习资源,并提交中文版勘误。——编者注

电子书及附录

扫描下方二维码,即可购买本书中文版电子书,并从“随书下载”处获取本书附录。

{%}

目录

  • 版权声明
  • 献词
  • 译者序
  • 前言
  • 致谢
  • 第 1 章 什么是JavaScript
  • 第 2 章 HTML中的JavaScript
  • 第 3 章 语言基础
  • 第 4 章 变量、作用域与内存
  • 第 5 章 基本引用类型
  • 第 6 章 集合引用类型
  • 第 7 章 迭代器与生成器
  • 第 8 章 对象、类与面向对象编程
  • 第 9 章 代理与反射
  • 第 10 章 函数
  • 第 11 章 期约与异步函数
  • 第 12 章 BOM
  • 第 13 章 客户端检测
  • 第 14 章 DOM
  • 第 15 章 DOM扩展
  • 第 16 章 DOM2和DOM3
  • 第 17 章 事件
  • 第 18 章 动画与Canvas图形
  • 第 19 章 表单脚本
  • 第 20 章 JavaScript API
  • 第 21 章 错误处理与调试
  • 第 22 章 处理XML
  • 第 23 章 JSON
  • 第 24 章 网络请求与远程资源
  • 第 25 章 客户端存储
  • 第 26 章 模块
  • 第 27 章 工作者线程
  • 第 28 章 最佳实践
  • 附录 A ES2018和ES2019
  • 附录 B 严格模式
  • 附录 C JavaScript库和框架
  • 附录 D JavaScript工具
  • 作者简介