跳到主要内容位置

前言&资源

感谢你从众多有关 JavaScript 的书籍中选择《JavaScript 基础语法详解》一书。自从在 Bilibili 上分享前端教学视频之后,我发现 JavaScript 基础是阻碍开发者编写前后端应用的绊脚石,所以想通过一种比较系统的、全面的途径来整合 JavaScript 基础知识和最新特性。后来机缘巧合,收到清华大学出版社编辑的邀请来编写一本关于 JavaScript 的书籍,此前也曾想过出一本书,但是由于工作和时间缘故就放弃了,而现在有了空闲的时间,所以就想利用这次机会来把我对 JavaScript 理解和经验编纂整理成书,来帮助你学习 JavaScript。如果你有其它语言编程经验或有过 JavaScript 的开发经验那么会对理解本书的内容更加有帮助,但是如果你是编程初学着,那么也可以把本书作为长期学习目标,边实践边总结同样可以完全掌握。

本书主要讲了 JavaScript 基础语法,并涵盖了从 ES6 到 ES2020 的新特性,也包括一些即将在 ES2021 发布的新特性,并且以较为全面和深入的方式介绍了这些语法和新特性的概念、使用方法和注意事项。由于 JavaScript 发展到今天已经成为了通用的编程语言,可以开发前端、后端、移动端、机器学习、数据可视化等各行业的应用,而且每种开发环境下所提供的 JavaScript 功能和特性均不相同,所以本书有意去掉了 HTML、CSS、DOM 操作以及 Node.js API 的介绍,目的就是让全职业的 JavaScript 工程师都可以阅读,无论你是前端工程师、Node.js 工程师、用户体验设计师、算法工程师还是数据工程师,在无需关注领域特定 API 的基础上,能够尽可能全、尽可能快的掌握 JavaScript 语法本身,以便于你在后期开发的过程中不再遇到语言、语法上的问题。至于领域特定的内容,每一领域都可以单独成书,而编写本书的初衷并不是大而全,不过本书的最后一章会根据各个职业的特点给出一个大体的学习方向,你可以参考它们并继续深入。

在内容编排上,本书基本按照由易到难的顺序对知识点进行排列,不过即便如此,不同章节的之间仍有很多交叉引用,因为学习编程并不是线性的,经常会需要用到其它章节的知识点来介绍某一章的某个概念,如果有不理解的地方,可以先暂时跳过,待看完一遍本书后再回过头来研究之前跳过的部分。本书总体分为了 14 章,每一章的大概内容如下:

第 1 章主要介绍为什么学习 JavaScript、JavaScript 的发展历史、如何编写并运行 JavaScript 代码以及语法概览。

第 2 章介绍了 JavaScript 程序的基础结构、如何定义变量并保存不同数据类型的数据、每种数据类型的特点和取值范围,包括 ES6 新定义的 Symbol 和 ES 2020 新定义的 BigInt 类型,以及不同数据类型之间的相互转换。

第 3 章介绍了运算符的概念以及分类、如何使用 JavaScript 进行数学计算、逻辑比较、逻辑运算、位运算,以及不同运算符之间的优先级,还介绍了 ES2020 中定义的 Null Coalescing(空值合并)运算符。

第 4 章介绍了语句和语句块的概念,以及在 JavaScript 中如何定义分支语句、循环语句和中断语句。

第 5 章介绍了 JavaScript 的语法核心函数的概念、定义和使用方法、函数参数、箭头函数、闭包以及函数式编程中的一些基本概念,例如递归、高阶函数、柯里化,Memoization 等等。

第 6 章介绍了数组的概念和用法、队列和栈模式、数组中常用的 API,如遍历、过滤、排序、裁切、搜索、reduce、扁平化等操作,以及针对数组的解构赋值和扩展运算符。

第 7 章介绍了 JavaScript 最常用的数据类型对象的定义方法、访问和修改对象的属性、属性描述符、Getters 和 Setters、原型及原型链的概念、构造函数、以及针对对象的解构赋值和扩展运算符的用法。

第 8 章在对象的基础上介绍了 ES6 新出的 class 关键字的用法,并借此介绍了面向对象的基本概念、如何实现继承和抽象类、成员和静态成员的区别,以及使用私有成员保护类的数据。

第 9 章介绍了字符串和正则表达式的概念,因为字符串在编程中的用途最为广泛,所以在单独的章节介绍了它提供的 API,以及如何使用正则表达式对字符串进行匹配。

第 10 章介绍了 JavaScript 的内置对象,如数学相关的 Math、日期相关的 Date、对象表示相关的 JSON、Map 和 Set 数据结构、TypedArray、迭代器和生成器,Symbol 类型的高级用法,Reflect 和 Proxy 的概念和用法等。

第 11 章介绍了异常处理方式和 Error 对象的扩展方法,以及 try...catch...fianlly 语句的用法。

第 12 章介绍了 JavaScript 异步编程的概念、setTimeout() 和 setInterval() 的用法和区别、Promise 的使用方法以及与传统回调函数的区别、async/await 关键字的使用方法、异步迭代器和生成器,以及 Event Loop 的原理。

第 13 章介绍模块化实现的方式,本章是唯一一章把语法分为 ES6 和 Node.js 两种的,因为它们的语法规范并不相同且都十分常用,所以分别介绍了如何使用 ES6 语法和 Node.js 的 CommonJS 方式导出、导入模块。

第 14 章给出了两个 JavaScript 编程综合案例,展示了面向对象编程和函数式编程的两种风格,另外也给出了学完本书后的一些发展方向,并针对前端、后端、机器学习和数据工程师分别总结了比较重要的概念和 JavaScript 库,以便于了解下一步该如何进行。

info

本书中对于较复杂的示例会提供示例源代码,命名遵循以下规则:

章节/概念+编号.js

例如 chapter2/string1.js,同一概念的示例后边按顺序对编号进行加 1,源代码目录会使用注释的方式标注在示例代码的第 1 行。

在编写本书过程中,感谢编辑赵佳霓对内容和结构上的指导,以及细心的审阅,让本书更加完善和严谨,也感谢出版社的排版、设计、审校等所有参与本书修订过程的工作人员,有了你们的支持才会有本书的出版。另外感谢我的家人,在我专心写书的时候给了我无尽的关怀和耐心的陪伴,还感谢 B 站粉丝、我的朋友、同学和同事,在我有问题和困难时,及时的提供帮助。

本书的源代码可在 Github 获取:https://github.com/zxuqian/javascript-book-examples

更多的教程和资源可以访问:

我的 Bilibili 主页:https://space.bilibili.com/302954484

我的个人博客:https://zxuqian.cn/,会定期更新 JavaScript 相关的学习教程和资源,可作为本书的有效补充,另外也会针对读者的疑问作出回答。 再次感谢选择本书!

张旭乾 JavaScript 基础语法详解 作者