前 言
如果你是JavaScript(或TypeScript)开发人员,并且想了解在过去几年中被添加到JavaScript的最新特性,以及如何在语言不断发展的过程中掌握新动态,那么《深入理解现代JavaScript》适用于你。只要你努力寻找,并对你信任的网站持谨慎态度,就几乎可以在网上找到《深入理解现代JavaScript》中的所有内容;《深入理解现代JavaScript》提供了所有的技术细节,同时告诉你如何跟踪不断发生的变化。
《深入理解现代JavaScript》内容
下面是每一章的内容概览。
第1章,ES2015~ES2020及后续版本的新特性——首先介绍JavaScript世界中的各种角色和一些重要的术语;然后描述“新特性”在《深入理解现代JavaScript》中的定义,以及将新特性添加到JavaScript的流程,包括这个流程是如何管理的,由谁管理,以及如何跟踪和参与这一流程;最后介绍一些在旧环境中使用新特性所需的工具(或在当前环境中使用最新特性所需的工具)。
第2章,块级作用域声明:let和const——涵盖新的声明关键字let和const以及它们支持的新作用域,深入介绍循环中的作用域,重点说明for循环中作用域的处理。
第3章,函数的新特性——涵盖与函数有关的各种新特性:箭头函数、默认参数值、“rest”参数、name属性和其他的语法改进。
第4章,类——涵盖新的class特性:基本概念、子类、super、创建内置对象(如Array和Error)的子类,以及new.target特性。私有字段和其他处于提案流程中的特性将在第18章介绍。
第5章,对象的新特性——涵盖可计算属性名、属性的简写语法、获取和设置对象的原型、新的Symbol类型以及它与对象的关系、方法语法、属性顺序、属性的展开语法,以及大量新的对象方法。
第6章,可迭代对象、迭代器、for-of循环、可迭代对象的展开语法和生成器——涵盖迭代(一种强大的用于集合和列表的新工具),以及生成器(一种强大的与函数交互的新方式)。
第7章,解构——涵盖解构这一重要的新语法,以及如何使用它从对象、数组和其他可迭代对象中提取数据,该章包含默认值、嵌套提取等语法。
第8章,Promise——深入研究这个用于处理异步过程的重要新工具。
第9章,异步函数、迭代器和生成器——详细介绍新的async/await语法(它允许你在异步代码中使用熟悉的逻辑流结构),以及异步迭代器和生成器的工作方式,还有新的for-await-of循环。
第10章,模板字面量、标签函数和新的字符串特性——描述模板字面量语法、标签函数和许多新的字符串特性,如更好的Unicode支持、常见方法的更新以及很多新方法。
第11章,新数组特性、类型化数组——涵盖很多新的数组方法、各种已有方法的更新、类型化数组(如Int32Array)以及与类型化数组数据交互的高级特性。
第12章,Map和Set——介绍所有新的有键集合Map和Set,以及这些集合的“弱”版本WeakMap和WeakSet。
第13章,模块——深入了解这个令人兴奋且强大的代码组织方式。
第14章,反射和代理——涵盖Reflect和Proxy对象的强大动态元编程特性以及它们之间的关系。
第15章,正则表达式更新——描述过去几年正则表达式出现的所有更新,如新的标志、命名捕获组、反向预查和新的Unicode特性。
第16章,共享内存——涵盖JavaScript程序中有关跨线程共享内存的复杂而棘手的方面,其中包括SharedArrayBuffer和Atomics对象、基本概念和陷阱注释。
第17章,其他特性——涵盖很多不适合放到其他章节的新特性:BigInt、新的整数字面量语法(二进制、新的八进制)、省略catch 绑定的异常、新的 Math 方法、取幂运算符、Math对象的扩展、尾递归优化、空值合并、可选链,以及出于兼容性原因而定义的“规范附录B”(仅浏览器)特性。
第18章,即将推出的类特性——描述在提案流程中处于阶段3的类的增强特性:公有字段声明、私有字段和私有方法。
第19章,展望未来——最后,描述目前正在进行的一些改进:顶层await、WeakRef和清理回调、正则表达式匹配索引、Atomics.asyncWait、一些新的语法特性、旧的正则表达式特性,以及各种即将推出的标准库扩展。
附录,出色的特性及对应的章(向J. K. Rowling致歉)——提供新特性的列表,并指出每个特性所属的章节。这些列表包括:按字母顺序排列的特性,新的基础知识,新的语法、关键字、运算符、循环等,新的字面量形式,标准库的扩展和更新,以及其他特性。
《深入理解现代JavaScript》读者对象
《深入理解现代JavaScript》的读者应该:
● 至少对JavaScript有基本的了解。
● 想了解过去几年中增加的新特性。
这不是一本为专家编写的学术书籍,而是一本面向JavaScript开发人员的实用性书籍。
几乎所有拿起《深入理解现代JavaScript》的人都知道书中的一些内容,但几乎没有人拿起这本书时就已经知道了所有内容。也许你已经清楚let和const的基础知识,但是还没有完全掌握async函数。也许Promise对你来说已经是旧语法了,但你在一些现代代码中看到了一些不认识的语法。你可以在《深入理解现代JavaScript》中找到ES2015~ES2020(及后续版本)的所有新特性。
如何使用《深入理解现代JavaScript》
建议先阅读第1章。第1章定义了《深入理解现代JavaScript》其余部分使用的很多术语。如果跳过第1章,你很可能会在阅读《深入理解现代JavaScript》时遇到困难。
之后,你可以选择按顺序阅读各章,或者跳着阅读。
我以这样的顺序安排各章内容是有原因的,而且每个章节都与前面章节息息相关。例如,第8章介绍的Promise,对于理解第9章中的async函数很重要。当然,建议你按照我安排的顺序阅读《深入理解现代JavaScript》。不过我敢肯定,你是一个有自己想法的聪明人,如果你不按照顺序阅读,也没关系。
建议你阅读(或者至少略读)所有的章节(第16章可能除外,稍后再谈这个问题)。即使你认为自己已了解某个特性,也可能不知道或者只是认为自己知道书中的一些内容。例如,也许你打算跳过第2章,因为你已经知道关于let和const的所有知识。你甚至知道为什么下面的代码创建了10个不同的变量i:
for (let i = 0; i < 10; ++i) { /*...*/
setTimeout(() => console.log(i));
}
还有,如果像这样使用:
let a = "ay";
var b = "bee";
为什么会在全局作用域创建window.b属性,却没有创建window.a属性?即使这些你都清楚,我也建议你略读第2章,以确保你掌握所有内容。
第16章有点特殊:它是关于如何在线程之间共享内存的。大多数JavaScript开发人员都不需要在线程之间共享内存。但有些开发人员需要,这也是第16章存在的原因;而大多数人不需要,如果你属于这一类,则可跳过该章;如果你认为自己在将来某个时候需要共享内存,可再回到第16章中学习它,这没关系。
此外,运行《深入理解现代JavaScript》的示例,用它们进行试验,祝你编程愉快。
《深入理解现代JavaScript》代码下载
你可以通过网址 https://thenewtoys.dev/bookcode 或https://www.wiley.com/go/javascript-newtoys下载各章的示例和代码清单,也可通过扫描封底的二维码下载。