共计 1908 个字符,预计需要花费 5 分钟才能阅读完成。
介绍
ES10 是与 2019 年相对应的 ECMAScript 版本。这个版本中的新功能没有 ES6(2015)中的那么多。但是,也不乏一些有用的功能。
本文在简单的代码示例中介绍了 ES10 提供的功能。这样,您无需复杂的解释即可快速了解新功能。
当然,需要具备 JavaScript 的基础知识才能完全理解所介绍的新功能。
ES2019 中的 JavaScript 新功能包括:
- Array#{flat,flatMap}
- Object.fromEntries
- String#{trimStart,trimEnd}
- Symbol#description
- try {} catch {} // 可选的错误参数绑定
- JSON ⊂ ECMAScript
- 格式良好的 JSON.stringify
- 稳定的排序 Array#sort
- 新版 Function#toString
- 新增 BigInt 原始类型 (stage 3).
- 动态引入模块 (stage 3).
- 标准的 globalThis 对象 (stage 3).
- ES10 Class: private, static & public (stage 3).
Array.flat() & Array.flatMap()
两个新的数组方法:
Array.flat() 方法创建一个新数组,所有子数组元素都以递归方式合并到该数组中,直至达到指定深度。
Array.flatMap() 方法首先使用 map 函数转换每个元素,然后将结果展平为新数组。它与 map() 后再调用深度为 1 的 flat() 效果相同,但是 flatMap() 将两者合并为一种方法,效率更高。
Object.fromEntries()
把键值对数组为元素的二维数组转换为一个对象。
String.protype.matchAll()
matchAll() 方法返回所有与正则表达式匹配字符串的结果的迭代器,包括捕获组。
String.trimStart() & String.trimEnd()
有两种新的 String 方法可从字符串中删除空格:
trimStart() 方法从字符串的开头删除空格。
trimEnd() 方法从字符串末尾删除空格。
Symbol.Description
当创建符号时,可以提供一个字符串作为描述。在 ES10 中,有一个获取描述的访问器。
可选的 Catch 参数变量
过去,try / catch 语句中的 catch 子句需要一个变量。现在,它允许开发人员使用 try / catch 而不创建未使用的 error 变量绑定。
JSON⊂ECMAScript
在 ES10 之前的版本中,不接受非转义的行分隔符 U +2028 和段落分隔符 U +2029。
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 个原始类型,它是一个任意精度的整数。而不仅仅是在 9007199254740992 处的最大值。
动态引入
动态 import() 返回所请求模块的 Promise。因此,可以使用 async/await 将导入的模块分配给变量。
标准 globalThis 对象
全局 this 在 ES10 之前尚未标准化。在生产代码中,您可以通过编写下边代码来“标准化”它:
ES10 Class: private, static & public 成员变量,函数
现在,新的语法字符#(哈希标签)用于直接在类中定义变量,函数,getter 和 setter,以及构造函数和类方法。
总结
自 2015 年 ES6 出现以来,这个语言就一直处于高速发展的状态。在这篇文章中,我们回顾了 ES10(2019)中出现的功能,并介绍了一些在 ES11(2020)中将保持稳定的功能,因为它们处于状态 3,并且可能最终会在下一版中实现标准化。
尽管这些功能中的许多功能对于 Web 应用程序的开发可能不是必需的,但是它们提供了通过技巧或大量冗长代码才能实现的可能性。