ECMAScript 2018(也被称为 ES10)是 JavaScript 的最新版本,它于 2018 年 6 月被正式发布。本文将介绍 ES10 新增的一些特性,包括异步迭代器,正则表达式改进, Promise.finally 方法,Rest / Spread 属性,RegExp 命名捕获组等等。
异步迭代器
异步迭代器是一个具有异步迭代功能的对象。它延迟迭代,可以让我们通过异步方式获取序列中的值。我们可以通过 for-await-of 循环或者 .next() 方法调用来迭代异步迭代器。
下面是一个例子,它展示了如何使用异步迭代器来处理一个类数组:
-- -------------------- ---- ------- ----- -------- --------------------------- - ----- ------- - --- --- ----- ------ ---- -- -------------- - ----- ------ - ----- --------------- --------------------- - ------ -------- - ----- ----- - ---------- -- -- -------------------------- --------- -- -- --------------------------- ----------------------------- -- ------------------- -- ------- --------- --------
正则表达式改进
ES10 中引入了一些正则表达式的改进,包括 Unicode 转义、s 标志和命名捕获组。
Unicode 转义
在 ES10 中,我们可以使用 Unicode 转义来表示 Unicode 码位点。它通过前缀 \u{XXXXX} 的形式来实现。例如,如果我们要匹配 圆形数字 ①,可以这样做:
const regex = /\u{2460}/u; regex.test('①'); // true
s 标志
s 标志用于匹配任何字符(包括换行符)。这个标志非常有用,因为在标准的正则表达式中,. 只能匹配除了换行符之外的字符。例如,如果我们要匹配任何字符(包括换行符):
const regex = /foo.bar/s; regex.test('foo\nbar'); // true
命名捕获组
在 ES10 中,我们可以给捕获组命名,使用 (?<name>...) 的形式来实现。例如,如果我们要匹配日期,可以这样做:
const regex = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/u; const match = regex.exec('2022-01-01'); console.log(match.groups.year); // '2022' console.log(match.groups.month); // '01' console.log(match.groups.day); // '01'
Promise.finally 方法
ES10 引入了 Promise.finally() 方法,该方法在 Promise 完成或者拒绝时都会执行一个回调函数。这个方法对于在 Promise 链中无论 Promise 是否被拒绝都要执行相同操作的情况非常有用。例如,如果我们想要在 Promise 完成或者拒绝时隐藏一个 loading 动画:
const loading = document.querySelector('.loading'); fetch('https://jsonplaceholder.typicode.com/todos') .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error(error)) .finally(() => loading.style.display = 'none');
Rest / Spread 属性
在 ES10 中,我们可以使用 Rest / Spread 属性来将对象或数组展开为一组参数。它可以让我们处理变长参数的情况。
展开数组
如果我们要在函数中传递一个数组作为参数,可以使用展开语法将其转换为一组参数:
function sum(x, y, z) { return x + y + z; } const numbers = [1, 2, 3]; sum(...numbers); // 6
展开对象
如果我们要在函数中传递一个对象作为参数,可以使用展开语法将其转换为一组参数:
-- -------------------- ---- ------- -------- ------------------ ---- ----- - -------------------- -- ------ ----- --- --- ----- -- - ---------- - ----- ------ - - ----- ------- ---- --- ---- ----------- -- ------------------------- -- ---- -- -- ----- --- --- ----- -- - ----------
总结
ES2018 引入了一些非常有用的功能,并且在许多方面都提高了 JavaScript 语言的强大程度。我们应该尝试使用这些新特性,以便更好地书写代码并提高代码的可维护性、可读性和可扩展性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a7e27a48841e989447f4be