JavaScript高级程序设计(第4版)
上QQ阅读APP看书,第一时间看更新

前言

关于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连续七年位于最流行编程语言榜首。

我们正迎来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所有内置的引用类型,如Date、Regexp、原始类型及其包装类型。每种引用类型既有理论上的讲解,也有相关浏览器实现的剖析。

第6章,继续讨论内置引用类型,包括Object、Array、Map、WeakMap、Set和WeakSet等。

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

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

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

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

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

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

第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+。

扫描封底二维码,可以下载本书源代码,并加入图灵前端研发小组。读者也可访问本书图灵社区页面(https://www.ituring.com.cn/book/2472)下载本书配套学习资源,并提交中文版勘误。——编者注

电子书及附录

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