# JavaScript: The Definition Guide, 7th Edition - JavaScript权威指南（第7版）

## 图书信息

- 英文书名：JavaScript: The Definition Guide, 7th Edition
- 中文书名：JavaScript 权威指南（第7版）
- 作者：[美] David Flanagan
- 译者：李松峰
- 页数：正文 595 页 / 不含附录
- 英文出版社：O'Reilly Media
- 中文出版社：机械工业出版社 / 华章图书
- 出版日期：英文原版 2020 / 简体中文版 2021
- 个人分类：前端 / JavaScript
- ISBN：978-7-111-67722-2

## 书评

写于2022年3月4日。

终于把《JavaScript权威指南（第七版）》断断续续地从头到尾读完了，历时差不多一个半月，虽然中间有很多时间都因为各种原因去读其他书或是写代码了，但读起来确实不容易。

本书常常被俗称犀牛书，并且经常拿来和另一本书《JavaScript高级程序设计》也就是俗称的“高程”比较。在第六版及之前，主流声音通常是推荐阅读高程而非犀牛书，因为第六版的犀牛书超过了一千页，而同期的第三版高程比犀牛书薄得多，并且语言很生动有趣。然而在现在，第七版的犀牛书已经大幅删减了不必要的内容，改变了试图通过一本书涵盖所有知识的策略，而是将那些冷门与不常用的特性只作简单提及，留待读者自行了解；怪异的是，第四版（也就是当前最新版）的高程则相反，加入了大量关于冷门特性的内容，变得事无巨细，甚至作者都换了，阅读体验较上一版很不一样。此外，当前最新版的犀牛书截至ES2020，高程截至ES2019，相比起来版本更新，另外高程在翻译上普遍反映存在不少问题。

我个人并没有读过高程，上面的总结主要来自于当前的网络风评。高程我只看过一点，但排版和作者的笔风我不是很喜欢，再加上网络风评不好，版本也较犀牛书旧一点，因此我还是选择了犀牛书。

犀牛书的阅读体验其实不错，讲得非常透彻与清晰，但很多地方还是缺少足够的示例和配图，这使我需要花很多时间去理解那些抽象的东西。另外，书中也确实就像前言里说的“有一部分内容可能会详细到令人反感”，有些地方也确实令我感到“详细到不必要”，但每当阅读完那些煎熬的部分，我都很庆幸自己没有放弃，为自己完全理解了某一个知识点而高兴。

老实说，虽然阅读体验还不错，但JavaScript本身的繁杂使得书中很多内容的阅读令人感到煎熬，我几乎是在以五倍于阅读其他技术书籍的时间在阅读这本书，尤其是浏览器的那一章，繁杂得令我头昏脑涨，完全没想到JavaScript有这么复杂的底层API，看来确实是被框架惯坏了。

此外，有一些章节确实不很容易理解，例如异步，这可能是我个人的原因，毕竟我其实很少使用异步相关的语言特性，在其他语言里，也往往是开个多线程了事，很少在乎线程安全，平时少量遇到JS异步的时候也就是随便套个await，几乎从未使用过Promise。在详细阅读这一部分之后，JS优秀的单线程异步思想确实令我感到非常有趣，只是理解过程充满了障碍，我现在也不是很确定是否真的理解了。

关于原型继承，我个人倒是没有什么理解障碍。不过JS中的很多元编程技巧确实令我开了眼界，非常有趣，遗憾的是JS不支持运算符重载。

总体而言，是一本很棒的书，虽然阅读并不容易，但只要愿意花时间应当都可以理解，值得每个从业者读一读，包括已经写了很长时间代码的前端程序员。

不过，本书在后半段令我感受到了一些质量下降的感觉。尽管总体翻译质量很不错，但中英文的差异仍给阅读带来了一定的障碍，而且也出现单词拼错这些低级问题，虽然一眼就看出来是笔误但还是令我感到很难受，并且很多地方缩进出了小问题，读起来不太舒服。

作者本身也没有很好地贯彻新特性，比如ES2020中的`??`运算符前面提了一下后面就没用过了，还是在用`||`。又比如作者明显还是倾向于直接使用Promise而非async/await语法糖，虽然很多地方给出了使用async/await优化的程序，但看得出来作者还是下意识地优先使用Promise。

此外本书还有一些独特的优点，例如讲了Node，虽然作者说“只涉及必要的Node知识”，但个人认为其实那一章讲得比Node官网上的Tutorial还要好一点，基本上已经把日常能用到的所有Node知识都讲了。

最后一章简单提及了npm、Babel、Webpack、ESLint、JSX（就讲了JSX，顺带提了一点React）的一些基础，供读者自行学习需要的知识。同时最后也拿几页提了一下Flow，讲了一下类型注解的优势。没讲TypeScript还是比较可惜的，不过Flow的基础语法与TS差不多，也差不了多少，考虑到这是本讲JS而不是TS的书，也算是挺不错了。

综合来看，这是我个人当前最推荐的JavaScript入门图书。尽管对于初学者来说可能稍微有些“过细”了，但对于想认真从事前端行业的程序员来说，这无论如何都是一本必读的书（当然，“高程”是另一个替代品）。