2020年共读了13本,其中有两本不在一开始的计划中,后来加入的。主要的阅读时间在上半年,疫情期间的阅读时间相对会多一些,下半年比较忙碌,抽出来阅读时间减少。
整理2020年前端的技术生态,列了个人认为比较重要的一些项目和技术点,目前stateofjs问卷还在统计中,后续可以做些调整。
String.prototype
上的match()
方法仅返回完全匹配,但是没有返回关于特定正则组的任意信息。感谢Jordan Harband关于String.prototype.matchAll
的提案,可以返回比match()
多很多的信息。返回的迭代器除了精确匹配外还给了我们访问所有的正则匹配捕获组。你还记得Gorkem Yakin和Daniel Ehrenberg添加到ECMAScript 2018的具名捕获组吗?matchAll()
方法和此能很好的协调。通过下面例子来解释一下。
1 | const text = "From 2019.01.29 to 2019.01.30"; |
1 | const text = "From 2019.01.29 to 2019.01.30"; |
不同于ECMAScript 2015中介绍的静态模块,Domenic Denicola提案的动态导入
可以实现按需加载。这个类似函数的格式(不是继承自Function .prototype
)返回一个很强大的promise。使用场景比如: 按需导入,在一个脚本中计算模块名并加载执行变得可能。
1 | const modulePage = 'page.js'; |
1 | (async () => { |
感谢Daniel Ehrenberg, Number.MAX_SAFE_INTEGER
不再是JavaScript中的一个限制。BigInt
是一个能表示任意精度整数的新基础类型。你可以通过使用BigInt
方法或者在一个数字后添加n
后缀来把一个数字转换为一个新的bigint
类型。
1 | Number.MAX_SAFE_INTERGER |
自从ECMAScript 2015以来,JavaScript仅支持两种promise组合: Promise.all()
和Promise.race()
。感谢Jason Williams, Robert Pamely and Mathias Bynens,现在我们可以使用Promise.allSettled()
。用这个方法来处理所有promise都解决时的场景(不管成功或失败)。看看下面的例子,并没有使用catch捕获异常!
1 | Promise.allSettled([ |
还有Promise.any()
有潜力很快进入ECMAScript规范中,在文章“Promise组合解释”中介绍了相关内容。
那么在JavaScript中什么是全局的this
?是在浏览器中的window
,在worker中的self
,在Nodejs中的global
或者其他… 这种混乱结束了!感谢Jordan Harband,我们现在可以使用globalThis
关键字了。
ECMAScript遗留了一个关于for-in循环顺序的详细描述。感谢Kevin Gibbons所付出的努力,为for-in机制定义了一系列规则。(原文: Thanks to Kevin Gibbons who finally put some TLC and defined a set in stone set of rules for for-in mechanics.)
读取层次很深的对象属性时通常是容易出错并且对应代码也不易阅读。感谢Gabriel Isenberg, Claude Pache and Dustin Savery,这件事情现在变得简单了。如果你是一个TypeScript用户,那么你不会发现什么新的特性,因为在3.7版本中TypeScript已经实现了这个特性。喜欢!
1 | // 之前 |
空值联合添加了一个新的短路原则操作符来处理默认值。Gabriel Isenberg做了很棒的工作。这个特性结合optional chanining特性使用。不同于||
操作符,空值联合操作符??
仅在左边的值为严格的null
或undefined
时起左右。
1 | "" || "default value" |
1 | const title = data?.article?.title ?? "What's new in ECMAScript 2020" |
Domenic Denicola提出的import.meta提案添加一个host相关的元数据对象到当前执行的模块中。
1 | console.log(import.meta.url) |
这是一个添加到规范中的有用特性,可以让开发者导出其他模块命名空间下的对象到一个新的名称下。
1 | export * as ns from "mod" |
基于2019年的阅读进度,2020年计划阅读20本,不再按照季度平均分配,根据阅读书籍的难易和厚度分配时间。