JavaScript基础语法详解
上QQ阅读APP看书,第一时间看更新

前言 PREFACE

感谢你从众多有关JavaScript的书中选择本书。自从分享前端教学视频之后,笔者发现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和ES2020新定义的BigInt类型,以及不同数据类型之间的相互转换。

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

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

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

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

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

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

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

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

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

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

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

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

本书中对于较复杂的示例会提供源代码,命名遵循章节/概念+编号.js的规则。例如chapter2/string1.js,同一概念的示例后边按顺序对编号进行加1,源代码目录会使用注释的方式标注在示例代码的第1行。

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

尽管本书经过多次检查,但难免会有疏漏和解释不到位的情况,敬请读者批评指正。

扫描下方二维码可获取本书源代码。

本书源代码

再次感谢选择本书!

张旭乾

2022年1月