12 个简单示例,带你了解 ES10 的 12 个特性
ES10 是 ECMAScript 2019 年对应的版本。此版本包含的新功能不如 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 原始类型(阶段 3)。
➡️ 动态导入(阶段 3)。
➡️ 标准化的 globalThis 对象(阶段 3)。
--
数组.flat() && 数组.flatMap
有两种新的 Array 方法:
-
Array.flat() 方法创建一个新数组,并将所有子数组元素递归连接到该数组中,直到指定的深度。
-
Array.flatMap() 方法首先使用映射函数映射每个元素,然后将结果展平为一个新数组。它相当于先执行 map() 操作,然后再执行深度为 1 的 flat() 操作,但 flatMap() 通常非常有用,因为将两者合并为一个方法效率会略高一些。
对象.fromEntries()
将键值对列表转换为对象。
String.protype.matchAll
matchAll() 方法返回一个迭代器,其中包含与正则表达式匹配的所有结果,包括捕获组。
String.trimStart() 和 String.trimEnd()
有两种新的 String 方法可以从字符串中删除空格:
-
trimStart() 方法从字符串开头删除空格。
-
trimEnd() 方法从字符串末尾删除空格。
符号.描述
有一个新的符号描述访问器,当您创建一个符号时,您可以提供一个字符串作为描述,在 ES10 中有一个此属性的访问器。
可选的 Catch Binding
过去,try/catch 语句中的 catch 子句需要一个变量。现在,它允许开发人员使用 try/catch,而无需创建未使用的绑定。
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 是第七种原始类型,它是一个任意精度的整数。变量现在可以表示 ²⁵³ 个数字,而不仅仅是最大值 9007199254740992。
动态导入
动态 import() 会返回一个用于请求模块的模块命名空间对象的 promise。因此,现在可以使用 async/await 将导入内容赋值给变量。
标准化的 globalThis 对象
在 ES10 之前,全局变量 this 并没有标准化。
在生产代码中,你只能自己写这么一个怪异的代码来跨平台“标准化”它:
结论
JavaScript 是一门活跃的语言,这对于 Web 开发来说非常有益。自 2015 年 ES6 发布以来,我们见证了这门语言的蓬勃发展。在本文中,我们回顾了 ES10(2019 年)中新增的一些特性,并介绍了一些将在 ES11(2020 年)中保持稳定的特性,因为它们目前处于状态 3,并且很可能会在下一版中被标准化。
尽管其中的许多功能对于 Web 应用程序的开发来说可能并非必不可少,但它们提供了以前需要使用技巧或冗长代码才能实现的可能性。
最初发表于www.carloscaballero.io。
文章来源:https://dev.to/carlillo/12-es10-features-in-12-simple-examples-2cbn