脑图点击这儿获取
视频版点击此处播放
↑↑↑↑↑↑ 脑图镇楼 ↑↑↑↑↑↑
Hello,各位小伙伴我们好。
今日我们来为我们讲一本书,便是这个《JavaScript 言语精粹修订版》,作者是:道格拉斯·克罗克福德
我手里的这本是《2017年10月第16次印刷版本》,距离现在现已有 5 年多了。可是这本书仍然被奉为《解说 JavaScript 的一本神书》,特别适合 初级、中级 前端工程师进行阅读。
可是我们要注意,尽管说这本书是 2017年
印刷的,可是书中说到的概念、界说并没有 考虑 ES6
相关的东西,也便是说它是 朴实的、ES6 之前的 JavaScript 精华的解说
整本书中所有的内容,我把它分为 4 大块:
- 前语部分
- 中心部分
- 其他部分
- 附录部分
在解说完这四部分之后,我们会剖析一下这本书在当下时间段针对国内开发者的优缺点,也便是最终的总结。
好,那么废话不多说,下面我们来看一下本书中的内容:
前语
在前语部分,作者说到了一个十分有意思的事情,那便是《为什么必定要运用 JavaScript》,他说:由于你没得选。
针关于 web浏览器而言,JavaScript 是仅有的编程言语,一起它也是世界上最被小看的言语之一。
我们知道, JavaScript 是 布蘭登·艾克 花了 10 天的时间开发而且设计完结的,所以它内部必然包含了许多的优异主意与糟糕的主意。
那么都有什么优异的办法呢? 作者以为:
- 函数
- 弱类型
- 动态目标
- 目标字面量
- …
这些东西,都能够被以为是优异的主意,也便是 精华
可是一起,内部也有许多糟糕的主意,也便是 糟粕,比方:根据全局变量的编程模型。
所以:JavaScript 是一个反差显着的言语,它的糟粕和精华相同显眼
而本书,将首要解说: JavaScript 的精华部分,至于 糟粕,将会在附录部分进行阐明。
中心
那么下面我们就进入到本书的中心精华部分,整个精华部分被分为 6 块,分别是:
- 语法
- 目标
- 函数
- 承继
- 数组
- 办法
那么首要,我们先来看语法部分。
语法:
整个语法部分涉及到的是整个 JavaScript
的根底语法。
注释
首要针关于注释而言,作者提出 JavaScript
中的注释首要分为两种:
- 单行注释
- 多行注释
单行注释是 两个 / ,这个在日常开发中是比较常见的。
而针关于多行注释来说,作者首要供给了一种,便是: **双斜杠中心,放入两个 *** ,这种多行注释的办法,作者并 不引荐 运用。
/*
多行注释内容
*/
可是我们要注意,在我们现在的日常开发中,多行注释,除了作者说到了这一种之外,其实还有别的一种,那便是:
/**
* 多行注释内容
/
这种注释办法用在 函数上 仍是十分指的引荐的。
标识符
接下来是标识符,所谓标识符指的便是:JavaScript
中的保留字。
书中罗列出来了一分部,可是除此之外,还有一些其他的保留字我们需要注意。
这些保留字 不能够 被作为 变量名 运用。
数字
针关于许多编程言语来说,都供给了多种的数字类型。比方: java
就供给了 int、long、double、float 等
多种数字类型。
可是针关于 JavaScript
来说,它只有一种数字类型,便是 number
,除此之外再无其他。
字符串
而关于 JavaScript
中的字符串类型而言,书中首要从两个方面进行了描绘:
-
首要是字面量:所谓字面量指的便是 快速创立某种类型的办法。关于字符串来说,它有两种字面量办法: 单引号和双引号。在日常开发中,我们更引荐运用 单引号 的字面量办法。
-
第二个叫做特性:这儿的特性首要有三个:
- 首要榜首个叫做 可拼接:多个字符串是能够经过 + 的办法进行拼接的。
- 第二个叫做
可 length
:我们能够经过字符串.length
的办法,获取字符串的长度 - 第三个叫做 有办法:
JavaScript
中的字符串供给了十分多的办法,这个我们把它放到 办法 这一大块中再去说就能够。
句子
JavaScript
被称作是一个图灵完备的编程言语。所以它必然要具有 变量声明、逻辑判别 等句子。
JavaScript
中的句子能够写在 <script>
标签 中,每一对花括号中心就能够被叫做一组句子。
书中把 JavaScript
的句子分为 4 大块:
-
首要是声明句子:
JavaScript
想要声明变量首要有三种办法- 榜首种是
var
:它是在ES6
之前仅有的声明变量的办法,现在现已不引荐运用了。 - 第二种是
let
:在ES6
之后能够经过它来界说变量 - 最终是
const
:在ES6
之后能够经过它来界说常量
- 榜首种是
-
其次是条件句子:
JavaScript
中的条件句子首要有两个- 榜首个是
if
- 第二个是
switch
这两种条件判别办法,在许多的编程言语中都是存在的。可是
JavaScript
中判别条件有些不太相同的当地。在
JavaScript
中 任何表达式 都能够被作为判别条件,而且 有且仅有 6 个值 在条件判别中会被作为 假,它们分别是:false、null、undefined、空字符串、数字 0 、NaN
。除此之外,其他的所有值都会被判别为 真 - 榜首个是
-
再往后便是循环句子:
JavaScript
中循环句子首要有三种- 榜首个是
for
循环 - 第二个是
while
循环 - 第三种是
do...while
循环
一起,针关于
for
循环来说,又能够被分为: 一般 for 循环 和 forIn 循环 - 榜首个是
-
最终便是强制跳转句子,所谓强制跳转句子指的是: 会强制更改程序履行次序的句子,这些句子在日常开发中也是被常常运用的:
- 比方
break
:它会让程序 退出循环 || 退出 switch 句子 - 而
continue
:会让程序 中止当时循环 - 然后是
renturn
:它会中止函数的履行 -
throw
:会经过 抛出反常的办法,中止程序履行 -
try...catch
:会经过 捕获反常 的办法,让程序强制跳转到其他的逻辑中
- 比方
表达式
说完句子之后,下面便是表达式。
作者对表达式进行了清晰的界说,指的是: 一组代码的调集,而且回来一个值
JavaScript
中的表达式 5 个,分别为:
- 算数表达式
- 字符串表达式
- 逻辑值表达式
- 左值表达式
- 根本表达式
字面量(目标)
在前面我们说到了 JavaScript
中存在字面量的概念。我们能够经过字面量的办法直接界说 字符串
一起,字面量也有许多其他的运用场景,比方:能够运用字面量界说目标或数组,而不需要像其他的言语相同,必须先 new
一下。
函数
整个语法部分,最终一块便是函数,可是在书中针对 语法部分函数 的解说比较粗糙,所以这一块我们放到后面独自的函数模块进行阐明。
目标
语法部分说完之后,接下来我们来看下书中 目标 的部分。
目标在 JavaScript
中是一个十分特殊的概念。
界说
在 JavaScript
中数据类型首要被分为两种:
- 简略数据类型:有
number、string、boolean、null、undefined、symbol、bigint
- 除了简略数据类型之外,其他的都被叫做 杂乱数据类型,有:
数组、函数、正则表达式、目标
。 而JavaScript
中,所有的杂乱数据类型,都被统称为 目标。
字面量
目标有字面量的创立办法,这个在刚才现已有介绍了,所以这儿就不在多复述了。
检索与更新
一起关于目标来说,它能够 获取值(检索) ,也能够 修正值(更新) 。
JavaScript
中供给了两种检索与更新的办法:
- 榜首种是经过
. 语法
:这种办法最为简略易懂,是大多数情况下引荐运用的办法 - 第二种是经过
[] 语法
:[]
内部能够放一个变量,适用于 根据变量取值的情况
原型
一起 JavaScript
中供给了原型的概念,根据原型还延伸出了原型承继的概念。
而关于目标的原型,我们放到 承继 这儿,再进行具体阐明。
反射
然后我们来看 反射。能够许多小伙伴看到反射这个词的时分,会比较懵。
其实在 JavaScript
里边,没有反射的清晰界说。我们就把它作为是 作者的一个称号即可
反射这一块里边,首要包含了两部分:
- 利用
typeof
获取变量的类型 - 利用
hasOwnProperty
判别 目标本身特点中是否具有指定的特点,具有则回来true
,否则则是false
枚举
hasOwnProperty
这个办法在 “枚举” 的时分会十分有用。
和反射相同,JavaScript
中相同没有枚举的清晰概念。它相同是作者的一个称号。
书中的枚举指的首要是: 遍历一个目标而且获取该目标本身的所有特点。
遍历能够直接经过 forIn
循环履行,而判别是否为目标本身特点,则需要凭借 hasOwnProperty
办法
删去
最终,针关于目标模块,作者还说到了 删去 的概念。
我们能够利用 delete
关键字,直接删去目标中的指定特点。这也是很便利的。
函数
在目标说完之后,下面我们就进入到了一个 大块 了,那便是函数!
在 函数 这一章里边,存在许多的 落后性 和 描绘的误差,一起也有许多的 精华。
具体是什么,我们往下看就知道了。
精华
在函数这一章的开篇,作者有一句话我十分喜欢,它描绘了整个编程的本质,我们一起来读一下:所谓编程,便是将一组需求分解成一组函数与数据结构的技能
在这句话中,把函数的效果推到了一个十分重要的方位。
现实也相同如此。
所以书中花费了十分大的章节来介绍函数,我们看脑图也能够看的出来。
那么下面,我们就进入到函数的内容之中。
函数目标
我们之前说过,在 JavaScript
中除了根本数据类型之外,其他的都是目标。
所以函数本质上也是一个目标。只不过它拥有一个叫做 “调用” 的特点,能够被调用而已。
函数字面量
而如果想要界说函数,那么能够经过 函数字面量 的办法来进行界说。
所谓的函数字面量,其实便是我们往常界说函数的办法,一共分为两种:
- 命名函数:
function f (a, b) { ... }
- 匿名函数:
const f = function (a, b) { ... }
调用
而在函数调用时,书中一共分为两部分去说:
-
首要榜首部分是 函数能够调用其他函数:这个只需我们运用过编程言语,那么应该都很好了解。这种办法会 暂停当时函数履行,传递控制权和参数给新的函数
-
第二种是 附加参数:在
JavaScript
的函数中,存在两个附加参数:-
榜首个是
this
:它的值取决于调用的办法。书中把调用办法分成了 4 大类:- 前三大类 办法调用、函数调用、结构器调用 中
this
指向调用方 - 最终一大类 apply 调用 中,
this
指向 指定值
- 前三大类 办法调用、函数调用、结构器调用 中
-
第二个
arguments
:它表明函数得到的所有实践参数
-
结构器办法
函数除了能够被直接 调用 之外,还能够被作为 结构器运用,也便是所谓的 结构器办法。
关于 结构器办法,书中首要清晰了四个方面,分别是:
-
JavaScript
是一门根据原型承继的言语,这就意味着 目标能够直接从其他目标中承继特点。 关于承继的话题,我们在后面独自说 - 第二个是: 结构器本身便是函数。
- 第三便是: 结构器不经过小括号的办法直接调用,而是要 合作 new 关键字 运用
- 最终便是:根据 约好,结构器它的 首字母要大写
这四块是十分重要的,哪怕是在当下时间段仍然是卓有成效的。
apply 调用办法
在前面,我们说到了 apply 调用办法,我们知道所谓的 apply 调用办法
实践上是分为三个办法的,分别是:
apply
call
bind
这三个办法的中心效果,便是 改变 this 指向
参数
在 参数 这个末节里边,相同书中首要说到的便是 arguments
,这个我们在前面也说过了,它首要是获取 所有实践参数 的。
回来值
再往后,书中对 函数的回来值 进行了一些阐明。
我们需要知道的,首要是有三点:
- 首要榜首点: 函数必然存在回来值。如果你什么都不回来,那么函数默认回来
undefined
- 然后: 能够经过
renturn
让函数提早回来指定的值,而且中止履行 - 第三:函数也能够合作
new
运用,这样会回来this
看到这我们有没有发现,书中讲过的许多东西,我们在日常开发中大部分都是知道的。
可是书中把开发的一些 “经验” ,变成了一套具体的 1、2、3 。
我在看的过程中,有时分确实会有一种: “哦~ 原来如此” 或者是 “嗯,确实是这样” 的一种感觉
反常
那么下面我们持续来往下看
书中专门在函数中,对反常进行了一个阐明。
可是阐明的重点仍然是 throw
句子,抛出反常。在抛出反常的,它能够中止函数的履行。
扩大类型的功用
作者把根据原型承继称为: 扩大类型的功用
可是本质上仍是 原型承继,这个我们仍然仍是在 承继 模块中去说就能够。
递归
递归是函数调用十分常见而且杂乱的场景。
书中也对 递归 进行了具体阐明,阐明的办法是经过两部分:
- 榜首个便是什么叫递归,所谓递归指的便是: 直接或直接调用本身的函数
- 接下来是递归的场景: 递归把一个杂乱问题分解为一组相似的子问题,每一个都用一个寻常解去处理,这是典型的美式言语。一起作者还经过一个 汉诺塔游戏 的案例,进行了举例阐明
效果域
接下来作者说到了效果域的概念。
可是这一块,显着具有十分大的局限性,由于作者的许多观念彻底是根据 ES6
之前的逻辑去说的。
比方,作者说到: JavaScript
中不存在块级效果域。
这个在当时场景下显着是不对的。
所以我看的这本书,尽管是 2017 年
印刷的,可是内容感觉愈加偏老一些。
闭包
接下来是闭包的逻辑。
这儿作者对闭包进行了界说: 内部函数能够拜访界说他们的外部函数的参数和变量 ,这样的函数便是闭包。
我针关于这句话加上我个人的了解,也总结了一句: 能够拜访其它函数效果域中变量的函数 ,便是闭包。
我们能够看看哪个好了解,就了解哪一句就能够。
这儿我罗列了一段代码:
function a () {
const name = '张三'
return function b () {
return name
}
}
console.log(a()()) // 张三
在这段代码中, b
函数 便是闭包函数
回调
在往下是 回调 的概念。
这儿其实首要便是阐明晰一点: 函数能够作为参数进行回调运用
模块
结合 闭包 和 回调 ,作者说到了 模块 这样的概念。
当 运用函数和闭包 时,能够结构一个模块。
那么什么是模块呢? 作者相同给出了界说: 模块是一个供给接口却躲藏状况与实现的函数或目标
只看概念,十分难以了解,我们经过这个代码往来不断看:
let name = '张三' // 此刻 name 为全局变量,能够被恣意修正
function a () {
// 此刻 name 为函数效果域变量
// 经过 const b = a() 得到 b 函数,然后进行调用
// name 不能够被外界修正
let name = '张三'
return function b () {
return name
}
}
经过这种模块的办法,来缓解 根据全局变量的编程办法 所带来的问题。
级联
所谓 级联,是作者的称号。
我们更喜欢把它叫做 链式调用,清晰了概念我们应该就知道是什么了。
柯里化
作者专门解说了 柯里化,他对柯里化是这样界说的,他说: 把函数与传递给它的参数相结合,产生一个新的函数。 这叫做柯里化。
这个界说和我们的往常认知不同,在我们的认知中,柯里化指的应该是: 柯里化是一种函数的转化,它是指将一个函数从可调用的 f(a, b, c) 转化为可调用的 f(a)(b)(c)
由于这本书原本是英文的,我们拿到的都是 转译之后的译本,所以关于一些界说,我们客观看待就能够了。
回忆
整个函数最终一块,说到了一个 回忆 的词汇。
这个在我们日常开发中不会这儿称号,这儿的回忆指的其实便是: 把函数的操作成果,保存到一个目标中,然后防止重复运算。
书中也拒了一些例子,可是本质上应该是一个类似算法的概念。
总结
那么到这儿,关于函数这一章我们就说完了。
从函数这一章中,其实我们就能够清晰的感受出来: 书中的内容具有必定的落后性(比方:块级效果域) 和 译文导致的一些描绘的误差(比方:柯里化) ,可是 其间也有许多的精华(比方:回来值、递归、闭包)
所以这本书,我们再去看的时分,必定要客观剖析一下才能够。
承继
那么下面我们来看 承继 这个章节
这个章节的内容不算特别多,至少比较于 函数 是这样的。
书中并没有具体的解说 JavaScript
中所有承继的办法,以及代码。
更多的仍是从理念的层次往来不断说的。一起 仍然包含许多落后性
精华
首要本章一开始先清晰了 JavaScript
的承继办法: JavaScript 是弱类型的言语,供给了多种承继的办法,而非传统的类承继
伪类
然后作者说到了 伪类 这样的一个词汇
这个伪类,说白了便是 结构函数,也便是: 首字母大写的一般函数
目标阐明符
这儿作者又说到了一个新的词汇:目标阐明符。
而且罗列出来了一个场景: 当一个函数接纳多个参数时,记住参数的次序十分困难
比方:
maker(f, l, m, c, s)
所以,与其这么写,倒不如这样写:
maker({
first: f,
middle: m,
last: l,
state, s,
city: c
})
简略来说,也便是: 把多个参数,合并成一个用目标表明的参数。
作者把这样的一种办法叫做: 目标阐明符。
原型
原型是承继中十分重要的概念。
可是由于书中的字数限制,作者并没有对原型展开了具体说,而仅仅清晰了两点:
-
首要榜首点是根据原型承继的概念: 一个新目标能够承继一个旧目标的特点
-
第二个是差异化承继:承继本质上需要具有差异,经过一个小的
demo
进行了清晰const person = { name: '张三', age: 18 } const newPerson = Object.create(person) newPerson.name = '李四'
这样,就完结了一个简略的差异化承继。
函数化
在讲完了原型之后,作者说到了一个 函数化 的概念。
作者提出: 原型的承继办法会导致没有私有变量。
如果我们运用过 ts
或者其他的 强类型编程言语(比方:java) 那么能够就知道所谓私有变量是什么意思了。
一起作者也经过一段代码来描绘了 如安在原型承继的办法下具有私有变量。
这段代码比较杂乱,也有点难以了解。可是在当下的场景中,由于 ES6
之后提出了 class
的概念,所以现在我们其实是有了更简略的办法界说私有变量的。
所以这段代码的含义就不大了。
部件
整个承继最终一块便是 部件
所谓部件指的便是: 目标(这儿是函数)的特点或办法。
每一个特点或办法都能够被称作是一个部件。
总结
整个承继的章节,内容并不多。
书中也没有大书特书的写关于原型承继的代码。
所以整个承继章节看下来,不会很累,概念性的东西居多。
数组
承继解说完结之后,新的一个章节叫做 数组
界说
这儿作者关于数组的界说比较有意思,他拿传统数组和 JavaScript 数组
进行了比照:
-
针关于传统数组来说:数组是一段线性分配的内存,它经过整数核算偏移并拜访其间的元素
-
可是
JavaScript
中的数组不同:- 首要: JavaScript 中并不存在数组相同的数据结构
-
JavaScript
只不过是供给了 类数组特性的目标
我们之前说过 js 中除了根本数据类型,其他的都是目标,这儿就能够呼应上了。
数组字面量
这个比较简略,便是经过 []
界说数组
长度
想要获取数组长度,经过 .length
特点获取
删去
想要删去数组的元素,书中说到了两种办法:
- 由于数组本质上是目标,所以仍然能够运用
delete
关键字删去。可是这种删去办法,会导致原来的方位留下 “空洞” - 而第二种办法,是我们比较常用的,那便是经过
splice
进行删去
枚举
所谓的枚举,其实指的便是我们常说的 遍历
而数组的遍历常用的办法首要是两种:
-
forIn
循环,可是这样无法确保次序 - 第二种是 一般的 for 循环,这也是我们常用的办法
其实除了这两种办法之外,我们应该还能想到其他,比方: forEach
办法。
容易混杂的当地
书中专门花了一个末节往来不断界说 数组与目标 容易混杂的当地。
其间中心便是当运用 typeof
的时分,typeof
无法区别出 目标和数组。
所以作者给出了一个办法来进行区别:
function is_array (value) {
return Object.prototype.toString.apply(value) === '[object Array]'
}
这种办法放到现在仍然可用。
除此之外,其实还有别的一种比较常用的办法,作者没有说到,那便是 instanceof
。
办法
数组中供给了一些被承继的办法,这些办法,我们放到 办法 这一章去说就能够了。
指定初始值
书中关于数组的最终一个末节解说了 数组初始值 相关的一些东西,首要是有两点:
- 榜首点便是: 数组没有预设值。经过
[]
界说数组后,会是一个空数组(本来难道不该该是这样吗?) - 第二点便是:
JavaScript
中本质上没有多维数组的概念,所谓的多维数组不过是 以数组为元素 产生的
总结
整个数组的环节,内容仍是比较简略的。
相当于把 JavaScript
中数组的一些中心特性进行了解说。
办法
再往后便是书中中心部分的最终一块了,也便是 办法
书中关于办法的解说首要是经过两部分:
-
榜首部分是对办法进行了界说,所谓办法指的是:当一个函数被保存为目标的一个特点时,那么这个函数就被叫做是办法。
-
第二部分类似于一个
API
文档。具体的介绍了:- Array
- Function
- Object
- Srting
这四大类的一些原型承继办法。
这些办法,在 MDN
文档中都能够直接检查,我们这儿就不去具体说了。
中心部分总结
中心部分解说完结之后,其实书中绝大部分 精华 我们就现已悉数整理完结了。
其他
除了大部分的精华之外,书中还说到了一些 其他 的东西,比方:
- 正则表达式
- 代码风格
- 美丽的特性
我们一个一个去说。
正则表达式
首要针关于正则表达式来说。
由于本书并不是一个专门解说正则表达式的书本,所以书中关于正则的内容并不多。许多当地也并不具体。
所以我并不是很引荐我们去看本书中关于正则的部分。
如果我们想要了解正则,倒不如到 MDN 文档 中进行检查。
代码风格和美丽的特性
针关于 代码风格和美丽的特性 这两块,由于 作者对 JavaScript 语法标准的了解,但并不彻底适合于国内环境,所以这两部分关于我们的参阅含义也不是很大。
可是这儿有一句话写的很好,我摘抄了下来,我们能够一起看一下
我们喜欢简略,追求简洁易用,可是当产品缺乏这种特性时,就需要自己去创造它。
附录
最终便是整本书的 附录 部分。
这部分首要是分成了 5 块。
其间前两块:
- 毒瘤
- 糟粕
比较有意思,我们能够一起来看一下。
至于后三块:
JSLint
语法图
JSON
不在我们本次的讨论规模之内。
毒瘤
作者把 JavaScript
中十分差劲的特性叫做 毒瘤。意思是: 不除不快
这儿面涉及到的语法十分的多,我们简略过一下即可:
- 全局变量:中大型项目中,全局变量能够被恣意修正,会使得程序的行为变得极度杂乱
- 效果域:无块级效果域
- 主动刺进分号:不合时宜的主动刺进
- 保留字:很多的保留字不能够被用作变量名
-
unicode
:unicode
把一对字符视为一个单一的字符,而JavaScript以为一对字符是两个不同的字符 -
typeof
:typeof
的回来总是很 “古怪” -
parseInt
:遇到非数字时会中止解析,而不是抛出一个过错 -
+
:既能够让数字相加,也能够链接字符串 - 浮点数:二进制的浮点数不能正确的处理十进制的小数
-
NaN
:NaN
表明不是一个数字,一起它的一些运算也会让人感到古怪 - 伪数组:
JavaScript
中没有真实的数组,却又存在伪数组的概念 - 假值:
0、NaN、''、false、null、undefined
在逻辑判别中都会被以为假 -
hasOwnProperty
:hasOwnProperty
是一个办法而不是运算符,所以在任何目标中,他能够被替换掉 - 目标:
JavaScript
中的目标永远不会是真的空目标,由于它们能够从原型链中获得成员特点
糟粕
作者把一些不符合标准,可是能够运用的代码,叫做 糟粕
首要有:
-
==
:不判别类型,所以尽量不要运用它 -
with
:改变一段句子的效果域链 -
eval
:传递字符串给 JavaScript 编译器,会使得代码愈加难以阅读 -
continue
:作者发现移除 continue 之后,性能会得到改进 -
switch
穿越:必须清晰中止 case,否则会穿越到下一个 - 缺少块的句子
-
++ --
:这两个运算符鼓励了一种不行慎重的编程风格 - 位运算符:
JavaScript
履行环境一般不触摸硬件,所以履行十分慢 -
function
句子比照function
表达式:多种界说办法让人困惑 - 类型的包装目标:你应该从来没有运用过 new Boolean(false)。所以作者以为:这是彻底没有必要,而且令人困惑的语法
总结
OK
,那么到这儿整本书中所有的内容,我们就现已悉数解说完了。
针关于《JavaScript 言语精粹修订版》来说,它的长处是十分清晰的:
- 体量小
- 初、中级工程师能够经过它快速理清 JavaScript 言语精粹
可是它的缺点也是十分突出:
- 内容偏老,针对 ES6 之前的语法
- 内容多为直译,导致有时分必定界说和词汇或许会让人很困惑
- 书中包含很多的作者主观表述,或许并不必定那么精准,我们需要客观看待。(比方: vue 中就很多的运用到了“糟粕” )