ES2018的新特性

在最新的 TC39会议上, 我们选择了一些新的功能, 使之成为"ECMAScript 2018语言规范"(ES2018)。 自 ES2017合并以来已达到stage-4的所有提案均获选定。 这篇文章让我们快速了解一下 ES2018的新功能。

Stage-4?

Tc39委员会有5个阶段的进程, 从stage-0到stage-4, 由此发展出一个新的语言特征。 stage-4是「完成」阶段。 第四阶段建议清单可在 GitHub 网站查阅。

Rest/Spread 属性

在析构时, rest / spread 属性允许您将对象的剩余属性收集到新对象中。 把它想象成一块魔法磁铁, 吸引着所有的残羹剩饭。

image

我自己也经常使用这个方法, 特别是在 React (Native)上下文中, 我可以从this.props中取出特定的一些值在当前文件中使用,剩下的属性则传递到子组件中。

image

此外, 如果你稍微转换一下你的思维, rest / spread 属性为您提供了一种很好的方法, 可以让你从一个immutable的对象中删除某个属性。

异步迭代

通过异步迭代, 我们得到了异步迭代器和异步迭代。 异步迭代器就像普通的迭代器一样, 除了它们的next()方法返回一个{value, done}的promise对象。 为了使用异步迭代器, 我们现在可以在 for... of 循环中使用await关键字。

image

Promise.prototype.finally()

Promise.prototype.finally()完成整个promise的实现, 允许您注册一个回调, 当一个promise完成(要么fulfilled, 要么rejected)时, 可以调用回调函数。

一个典型的用例是在调用fetch()之后隐藏加载页面: 不用在then()catch()中实现同样的逻辑,而是只要在finally()中实现就可以。

image

正则相关特性

总共有4项与 RegExp 相关的建议被纳入 ES2018:

  • s (dotAll) flag for regular expressions
  • RegExp named capture groups
  • RegExp Lookbehind Assertions
  • RegExp Unicode Property Escapes

我特别推荐了"RegExp named capture groups"功能, 因为它提高了可读性:

image

更多关于这些特性的信息可以在 Mathias Bynens (这些提议背后的推动力之一)的博客: ECMAScript regular expressions are getting better!

其他新特性

最重要的是对模板字面量的调整: 当使用标记模板字面量时, 删除了对反义序列的限制, 从而允许像 \xerxes 这样的表达。 在这个调整之前, 这样的写法就会抛出一个错误, 因为 \x 表示十六进制, 而 erxes 不是一个有效的十六进制值。

标记模板字面量

如果用一个表达式来处理模板字符串, 那么这个模板字符串被称为标记模板字面量。 在这种情况下, 标记表达式(通常是函数)会在处理模板字符串的时候被调用, 这就允许你在输出之前可以进行一些特定的操作。

现状如何?

请注意, 并非所有的浏览器都支持这些功能。 Stage-4 意味着它们已经完成, 浏览器供应商应该去实现它们了(一些浏览器已经支持了, 其他的正在进行中)。

你可能感兴趣的:(ES2018的新特性)