ES2018 是 ECMAScript 的第九个版本,也被称为 ECMAScript9。它在 2018 年 6 月发布,是 JavaScript 的新版本。ES2018 引入了许多新的有用功能,这些新特性可让开发者更轻松地编写更加复杂的 JavaScript 代码。在本文中,我们将深入了解 ES2018 的新特性以及如何使用它们。
Promise.prototype.finally
Promise.prototype.finally 是在 Promise 状态改变时执行的回调函数,不管 Promise 被 resolved 还是 rejected。在以前的版本中,我们必须写两个回调来分别处理成功和失败的情况。而现在,我们可以提供一个 finally 函数,它将总是被执行,无论 Promise 是成功还是失败。下面是一个示例:
fetch("https://jsonplaceholder.typicode.com/users/1") .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.log(error)) .finally(() => console.log("done"));
在这个示例中,我们从 API 检索用户数据。我们使用 then() 处理成功情况并打印用户数据,使用 catch() 处理错误情况并打印错误消息,然后使用 finally() 打印“done”。
Rest/Spread 属性
Rest 和 Spread 是在 ES6 中加入的重要特性,以便轻松处理对象和数组。在 ES2018 中,我们可以使用 Rest 和 Spread 属性为对象添加新的属性。这些属性可以是对象自己的属性,也可以是其他对象的属性。
let obj1 = { x: 1, y: 2, z: 3 }; let obj2 = { ...obj1, a: 4, b: 5 }; console.log(obj2); // { x: 1, y: 2, z: 3, a: 4, b: 5 }
在这个示例中,我们使用 Spread 属性通过 obj1 和若干个新属性来创建一个新对象。这与 ES6 中使用 Spread 运算符来将对象和数组展开相似。使用 Rest/Spead 属性可以减少代码量并增加代码可读性。
正则表达式命名捕获组
在 ES2018 中,我们可以给正则表达式命名捕获组。以前,我们必须通过索引来访问捕获组,但现在我们可以给它们起一个有意义的名称。这些属性将会作为对象的属性返回。例如:
const reg = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/; const result = reg.exec("2022-03-11"); console.log(result.groups); // {year: "2022", month: "03", day: "11"}
在这个示例中,我们为正则表达式定义了三个命名捕获组:year、month和day。结果对象现在具有命名组,这使得访问结果变得更加清晰简单。
其他新特性
还有许多其他新特性通过 ES2018 添加到了 JavaScript 的工具箱中,例如:
- 增加异步迭代器,更容易处理异步集合。
- Promise.allSettled 可以验证所有 Promise 是否已完成并返回解析的值。
- Object.fromEntries 应该是更常见了,因为它很容易将键值对转换为对象。
- 在嵌套模板字面量中使用标记函数时,现在可以明确使用防止注入攻击。
总结
ES2018( ECMAScript 2018 )引入了许多新功能,这些功能可以让 JavaScript 开发变得更加容易。Promise.prototype.finally、Rest/Spead 属性、命名捕获组等本文介绍的特性,必将提高代码的清晰性,降低代码的复杂度。开发者可以根据不同使用场景选择不同的新特性来实现更好的代码效果。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6471bfd5968c7c53b0f9f4b1