ECMAScript 2018 (或称ES9) 是 ECMA 国际标准组织于2018年6月发布的最新的JavaScript标准。此标准介绍了一些新的语言特性和API,下面将逐一介绍。
Rest/Spread 属性
Rest/Spread 属性是一种使用三个点 (...) 表示的新语法。它可用于函数的定义和调用以及对象字面量和数组字面量。它的作用是可以将对象展开,或者在参数列表中捕获任意多个参数,并将其转换为数组。
对象展开
const person = { name: 'Alice', age: 25 }; const newPerson = {...person, country: 'USA'}; console.log(newPerson); // { name: 'Alice', age: 25, country: 'USA' }
函数参数
function foo(a, b, ...rest) { console.log(a); // 1 console.log(b); // 2 console.log(rest); // [3, 4, 5] } foo(1, 2, 3, 4, 5);
数组字面量
const arr1 = [1, 2, 3]; const arr2 = [4, 5, 6]; const arr3 = [...arr1, ...arr2]; console.log(arr3); // [1, 2, 3, 4, 5, 6]
异步迭代
ECMAScript 2018 引入了 for-await-of 循环来处理异步迭代。它通过 await 执行迭代并等待 Promise 完成。这个特性可以帮助我们更方便地处理异步数据流。
-- -------------------- ---- ------- ----- -------- ----------- - ----- ---- - ----- -------------------------------------- ----- -------- - ----- ------------ ------ --------- - ----- --- - ----- -- -- - ----- -------- - ----- ------------ --- ----- ------ ---- -- --------- - -- --------- - -
Promise.prototype.finally()
在 ES9 中,Promise 实例新增了一个 finally 方法。它接收一个回调函数,在前两个 then 或 catch 方法执行完毕后调用该函数,无论 Promise 是 resolved 还是 rejected 都会执行该回调。
fetch('https://api.example.com/data') .then(result => { /* handle fulfilled promise */ }) .catch(error => { /* handle rejected promise */ }) .finally(() => { console.log('Done.'); });
正则表达式命名捕获组
ES9 增加了一项非常实用的正则表达式特性-命名捕获组,它允许我们使用命名而非索引来定义捕获组。
const date = '2021-05-20'; const pattern = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/; const match = date.match(pattern); console.log(match.groups.year); // 2021 console.log(match.groups.month); // 05 console.log(match.groups.day); // 20
其他语言特性
此外,ES9 还包括了一些其他的语言特性,例如:
Object.values()
/Object.entries()
:Object.values()
返回一个包含对象所有的值的数组,Object.entries()
返回一个包含所有 [ key,value ] 对的数组 。- 支持 Unicode 字符
Array.prototype.sort()
的行为更改:比较器函数现在可以返回 0。
结论
ECMAScript 2018 引入了一些非常实用的新特性,让 JavaScript 变得更加灵活和强大。尽管不是所有特性都适用于所有项目,但它们可以帮助我们更轻松、更方便地编写 JavaScript 代码。建议开发者们根据项目需要合理使用这些特性,以获得更好的编程体验。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6710bdffad1e889fe2fbc7f2