十二个 JavaScript ES10 新特性实例
ES10 对应 ECMAScript 2019 年版本。这个版本不像 ES6 (2015) 那样有大量的新功能特性。然而,也有包含一些有用的特性。
本文通过简单的代码示例介绍 ES10 功能特性。这样,你可以很快理解这些新功能,其实并不需要多么复杂的解释。
当然,还是需要具备基本的 JavaScript 知识,才能完全理解这些最佳介绍。
JavaScript 的 ES2019 版本新功能有:
➡️ Array#{flat,flatMap}
➡️ Object.fromEntries
➡️ String#{trimStart,trimEnd}
➡️ Symbol#description
➡️ try { } catch {} // 可选绑定
➡️ JSON ⊂ ECMAScript
➡️ 形势良好的 JSON.stringify
➡️稳定的 Array#sort
➡️ 修订 Function#toString
➡️ BigInt 基本类型 (阶段 3).
➡️ 动态引入 (阶段 3).
➡️ 标准 globalThis object (阶段 3)
Array.flat() && Array.flatMap
数组的两个新方法:
-
Array.flat() 方法会按照指定的深度,将子数组合并为一个新的数组。
-
Array.flatMap() 方法首先使用映射函数映射每一个元素,然后将结果压入一个新的数组。它和 map() 后跟随一个深度为 1 的 flat() 相同,但是 flatMap() 更为有用,它将两种方法合并为一个,效率更高。
Object.fromEntries()
将 key & value 键值对列表转换为一个对象。
String.protype.matchAll
matchAll() 方法返回与正则表达式匹配的字符串数组的迭代器,包含捕获组。
String.trimStart() & String.trimEnd()
两个新的移除字符串空白的方法:
-
trimStart() 方法移除字符串开头的空白。
-
trimEnd() 移除字符串结尾的空吧。
Symbol.Description
一个新的 Symbol 描述访问器,当你创建一个 Symbol 你可以提供一个字符串描述,在 ES10 他就有一个访问器属性。
可选捕捉绑定
之前 try/catch 语句中 catch 子句要求有参数。现在,它允许开发者在 try/catch 中不绑定参数了。
JSON⊂ECMAScript
未转义的分离器 U+2028 和段落分隔符 U+2029 不被 ES10 之前的时代所允许。
-
U+2028 段落分隔符。
-
U+2029 行分隔符。
形式良好的 JSON.stringify()
JSON.stringify() 可以返回 U+D800 和 U+DFFF 之间的字符作为没有对应 UTF-8 的值。然而,JSON 格式化需要 UTF-8 编码。建议的解决方案是将未配对的替代代码点表示为 JSON 转义序列,而不是将它们作为单个 UTF-16 代码单元返回。
稳定 Array.prototype.sort()
V8 之前,在数组拥有超过 10 个子项时,使用非稳定快速排序实现。
一个稳定的排序算法是当两个键值相等的对象以相同的顺序出现在已排序的输出中,就像它们出现在未排序的输入中一样。.
新的 Function.toString()
toString() 方法返回表示函数源代码的字符串。在 ES6 中,当 toString 在函数上调用时,会根据 ECMAScript 引擎返回表示函数的字符串。如果可以,它会返回源码,否则,是一个标准的占位符。
BigInt — 任意精度整数
BigInt 第 7 个基本类型,并且是个任意精度整数。变量现在可以表示 2^53 数字,而不仅仅是最大 9007199254740992。
动态引入
动态 import () 返回所请求模块的模块名称空间对象的 Promise。因此,可以使用 async/await 将引入赋值给变量。
标准化 globalThis 对象
全局 this 在 ES10 之前并未标准化。
在生产代码中,你会通过自己写如此怪异的代码来实现跨多平台的 「标准化」:
结束语
JavaScript 是一活跃语言,这对 web 开发非常有益。自 2015 年 ES6 面世以来,我们的语言就一直蓬勃前进。在这篇博文中,我们就回顾了 ES10(2019) 中的功能特性以及介绍了一些将会在ES11(2020)稳定的版本,因为它们已经是阶段 3 了,基本可以确认接下来会标准化了。
尽管这其中很多功能特性并不是你 Web 应用中的必需品,但是它们提供了之前需要同构技巧或大量冗长代码代码才能实现的可能性。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
推荐文章: