> For the complete documentation index, see [llms.txt](https://gaoge011022.gitbook.io/suda-major-change-guide-cs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://gaoge011022.gitbook.io/suda-major-change-guide-cs/ge-ren-tui-jian-shu-dan/qian-duan-javascript.md).

# 前端（JavaScript）

不讨论 HTML 和 CSS，因为这俩不需要看书学习。仅讨论 JavaScript。

*更正一下，CSS 严格说是“没必要深入学”，因为实际工作中主要用的都是 UI 库，很少需要实际操作 CSS 组件，因此只需要随便看点快速入门的东西学点皮毛就足够了。HTML 同样如此，虽然 HTML5 的知识点一大堆，但同样是只需要学一些基础就完全足够了，业务中虽然一直在和 HTML 打交道，但实际用到知识非常有限。尽管 HTML 和 CSS 都有一千多页或是将近一千页的“权威指南”这种书，但我个人不推荐读任何一本，至少初学时非常不推荐。*

> 任何可使用 JavaScript 来编写的应用，最终都会由 JavaScript 编写。——Jeff Atwood

另外，关于 JavaScript 的书时效性非常强，任何英文原版距今超过三年的书都不推荐阅读（尤其是偏实用技术的书），更不必谈距今四五年甚至更长的书。

此外，将 JavaScript 作为入门编程的第一门语言是**不推荐**的，因为 JavaScript 由于历史问题包含了太多糟粕。JavaScript 虽然容易上手，但由于其独特的内核，深入学起来其实并不简单，特别是如果你此前仅接触过 C/C++/Java 这些静态语言，JavaScript 的很多概念理解起来并不容易。我的建议是，在基本学完 Python 后可以尝试着学习 JavaScript，将这两门相似而内部思想又大相径庭的语言结合在一起来看是很有启发的。

### 两本基础教程

*由于 JavaScript 历史遗留问题**非常**严重，这导致**所有**严谨的 JavaScript 教程都会涉及 JavaScript 非常多的缺陷与如何避免缺陷，这使得它们的内容都非常冗长而累赘，几乎无一例外。*

JavaScript 的**所有**基础教程书籍都不推荐直接阅读，尤其不推荐没有其他语言基础者阅读。尽可能通过实际项目快速上手，而不是硬啃教程，否则啃完后还是不会用框架。个人建议可以边读边做项目。*或者干脆去看阮一峰的博客。*

* **JavaScript 高级程序设计（第 4 版）**：中文版正文 865 页，英文原版出版于 2020 年，黑白印刷。俗称高程。不要被书名中的“高级”欺骗，本书仅仅是基础教程。涵盖非常全，内容十分详细，但有涵盖过广的嫌疑。内容截止到 ES2019。翻译一般。
* **JavaScript 权威指南（第 7 版）**：中文版正文 595 页，英文原版出版于 2020 年，黑白印刷。俗称犀牛书。最新版删除了大量不太实用的内容，并且涉及了一点 Node.js。内容广度不如高程，但细节讲得比高程更深。内容截止到 ES2020（但也包括了一些当时仍是提案的特性，因此其实也介绍了 ES2021 及 ES2022 的一部分内容，比如私有属性和静态属性，top-level await 等）。个人不太建议直接读这本，毕竟是权威指南，别看页数少就以为比高程好读，这本绝对是要啃着看的。翻译不错。

*现在是 2022 年 3 月 6 日，我真正从头到尾看完了《JavaScript 权威指南》，此前对这两本书的评价作废。目前强烈推荐《JavaScript 权威指南（第 7 版）》，不要去看高程了。虽然是一本需要啃着看的书，但认真读完绝对大有裨益。读完之后基础基本全部打完，可以直接开始学技术，例如 React/Vue/Node 这些，并且我下面推荐的所有书都可以直接挑一本开始看。*

### 几本进阶教程

下面几本书的出版时间距今都比较久，请注意时效性。

* **JavaScript 语言精粹**：中文版正文 100 页，包含附录 147 页，英文原版出版于 2008 年，黑白印刷。作者 Douglas Crockford。俗称蝴蝶书。由于出版很早，因此内容仅截止至 ES3，注意时效性。在 ES6 大规模使用的今天，参考价值一般，但很多见解仍旧很有帮助。反正读完花不了一个下午，不如读读，虽然版本老但是仍能增进对 JavaScript 很多核心特性的理解。翻译不错。
* **JavaScript 悟道**：中文版正文 295 页，英文原版出版于 2018 年，黑白印刷。作者 Douglas Crockford，可以当作上面那本书的新版，但其中的私货（主观成分）超级加倍，所以最好还是当作两本书来看。个人不太推荐直接读，书中很多东西与其说是在讲技术不如说是在发牢骚，个人感觉逊色于上面的蝴蝶书。书中的内容确实有一些帮助，但其实很有限，不如说更适合那些真正富有经验的老程序员阅读。如果你已经写了好几个月的前端，可以闲暇的时候看看当乐子。翻译值得一提，非常接地气，但是由于很多地方翻译得过于舞文弄墨（比如把不少地方翻译成了我看不懂的文言文），所以很难评价翻译得好不好。
* **你不知道的 JavaScript**：分上中下三册，中文版正文共 817 页，英文原版分别出版于 2014/2015/2017 年，黑白印刷。俗称小黄书，目前仍被很多程序员奉为前端面试必读。出版于 ES6 即将诞生之际，书中内容也根据 ES6 作了修改，因此目前算是勉强不过时。主要讲的是 JS 的原理和一些容易引起困惑的地方。三本书里每本都不厚，虽然加起来确实有些厚度，但实际上读起来很快。个人评价是第一本很不错，第二本开始质量就下滑了，不太容易理解，第三本讲的主要是 ES6，没必要读（因为你应当在学基础的过程中已经完全学完了这些东西），而且讲得也不清楚。虽然比较老了，但目前仍然是（有中文翻译的书中）最推荐的 JavaScript 进阶书，学完基础首推这套书（第三本别买，真没一点意义，实在感兴趣微信读书上可以看，不要花冤枉钱）。翻译一般。
* **The Joy of JavaScript**：国内没看到有人推这本书，但我个人读着觉得还不错，推荐一下。书是 2021 年 3 月份出版的，中文版还没出，也不知道有没有人在翻译，说不定不出中文版了。作者 Luis Atencio 曾经也写过几本 JS 相关的书，比如 JavaScript 函数式编程指南，属于是很早期就活跃的社区人物了，水平还是很有一些的。和小黄书有点像，作者把原型、对象、函数式、异步、闭包等不少 JavaScript 核心特性都讲了一遍，还涉及了一些实验性特性（未来可能会加入 JS 的特性），比如管道操作符（|>）和 Observable（这个在 RxJS 里已经有了）。书中以一个构建区块链的例子贯穿，作者一步步介绍 JS 的各种核心特性并一边完善区块链，然后在书的最后就构建出了一个基本可以运行的简单区块链。我个人感觉很有趣，值得一读。不过讲的东西有点多，其实有些地方还是没讲透，所以有些地方深度不如上面的小黄书，易读性也差一点。如果英文水平不错，可以在[这里](https://link.zhihu.com/?target=https%3A//learning.oreilly.com/library/view/the-joy-of/9781617295867/)读一读试试水。

另外推荐一本《重构（第 2 版）》，第二版采用 JavaScript 重写过了（注意不是第一版，第一版用的 Java），很有参考意义。不过这本书严格来说属于通用书籍，不该归于 JavaScript 的范畴，因此放在了 9.16 节“最佳实践”。

### 框架、TypeScript 与 Node.js

目前前端主流框架有 React、Vue 和 Angular，当前推荐在 React 和 Vue 中挑一个学。此外 TypeScript 如今几乎已经成为了大型前端项目的标配，最好也要学一下。另外，现在 Node.js 发展越来越好，学一下还可以搞一些简单的后端，建议学一下，花不了几个小时。至于 UI 框架，随便学哪个，看一下文档基本上两个小时就能学会，国内用的比较多的是 Ant Design，比较符合国人审美。此外，在国内微信小程序也可能是会接触到的，通过微信官方文档学起来还是挺快的，市面上有几本书也可以看，我就不具体推荐了，去豆瓣上找一本评分高的就可以。

* **React 学习手册（第 2 版）**：中文版正文 361 页，英文原版出版于 2020 年，黑白印刷。可以作为官方文档替代品，不喜欢看文档可以试试这本。书前面一部分讲的一部分函数式编程思想挺有意思。翻译不错。
* **TypeScript 编程**：中文版正文 314 页，英文原版出版于 2019 年，黑白印刷。讲解 TypeScript 的一本比较愉快的书，深度足够。翻译不错。
* **深入浅出 Node.js（朴灵）**：正文 305 页，出版于 2013 年，黑白印刷。版本比较老。够深入了，但不浅出，属于 Node.js 进阶书。至于入门 Node.js，请移步[Node.js 官方中文入门教程](http://nodejs.cn/learn/introduction-to-nodejs)，一下午就能看完，很容易懂。虽然作者说第二版在写了，但已经拖了好几年了，不知道什么时候出第二版，先拿第一版凑活。书写得比较深，所以入门绝对不该读这本，但是个人认为读完犀牛书涉及 Node 的那一章就可以看这本了。讲得确实很不错，虽然很多代码不能跑了，但用这本书来了解思想是很合适的，毕竟 Node 的核心这么多年过去也没什么变化。

前端领域有非常多很棒的技术书值得推荐，我没办法在这里全部列举，因此也不是说这里没提到的就不建议读。只要你愿意，可以在中英文社区找到非常多相关领域的书籍，它们讲得都很好。当然，关键还是注意一下时效性，那些纯讲技术的书三年之前出版的就不建议读了。

此外，关于选用 React 还是 Vue 常常有很多争论。这两个框架在性能上没有太大的差异（尽管有 Vue 比 React 快一倍的说法，但实际上非高上一个数量级的“更快”意义不大，而且 React 的性能也很容易优化），语法的差异也不算很大。我当然是建议都学，毕竟逻辑思路没差多少，学完一个另一个很容易学。如果是新手入门的话，相比起铺天盖地的“Vue 更适合入门”的说法，我反而更建议学 React，React 的特点就是简单粗暴，没有太多 API，你在学习 React 的过程中可以很明显感受到自己的进步，而 Vue 上手或许稍微简单一些，但稍微深入后就会发现自己基本上就是在学习一大堆 API。我个人对这两个框架没什么倾向，也没什么贬低哪个框架的意思，它们都很好，采用的两种设计思路我也都很喜欢，没有高下之分。我在上面没有推荐 Vue 有关的书，只是因为 Vue 的中文文档确实写得太好了，没必要推书……

如果你对这两个框架的应用情况感兴趣，可以在浏览器里同时装上 React 和 Vue 的开发插件，它们会提醒你当前浏览的网站是使用哪个框架开发的，比如知乎就是用 React 开发的，简书就是用 Vue 开发的，它们都是被广泛应用的框架。React 主要被大厂广泛使用（因为更加成熟），而 Vue 则是中小型公司使用多一点（因为上手更简单，容易招到人）。
