JavaScript ES9新特性

在这里插入图片描述


以下是JavaScript ES9引入的一些新特性。每个特性都有助于简化开发过程、提高代码效率,并提供更强大的功能。
JavaScript ES9(也称为ES2018)

Object spread syntax(对象扩展语法)

const obj1 = {
    
     a: 1, b: 2 };
const obj2 = {
    
     c: 3, ...obj1 };
console.log(obj2); // { c: 3, a: 1, b: 2 }

可以使用…语法将一个对象的属性扩展到另一个对象中,并创建一个新对象。

Promise.prototype.finally()

fetch('https://api.example.com/data')
  .then(response => response.json())
  .finally(() => {
    
    
    console.log('Fetch request completed.');
  });

finally()方法在Promise被解决或拒绝后,无论如何都会执行。它允许你指定在Promise结束时必须执行的清理逻辑。
在上述示例代码中,fetch函数用于发送一个异步请求获取数据,并使用.then()方法处理响应数据的解析过程。在这个链式调用中,我们使用了finally()方法来指定在Promise结束后必须执行的清理逻辑。

无论Promise对象最终被解决(resolved)还是被拒绝(rejected),finally()方法都会在其之后执行。在上述代码中,不论请求是否成功或失败,最终都会输出"Fetch request completed."。

finally()方法的作用是确保在Promise结束时执行一些必要的操作,例如关闭文件、释放资源、清理缓存等。它常常用于处理无论成功还是失败都需要执行的公共逻辑,以保持代码的整洁性和可读性。

需要注意的是,虽然finally()方法在ES2018中被添加到了Promise原型(Promise.prototype)中,但在某些老旧的JavaScript环境中可能不受支持。为了确保代码的兼容性,可以使用Promise的polyfill或者使用其他的工具库(如bluebird)来提供类似的功能。

总之,finally()方法是Promise对象提供的一个便捷的方式,在Promise结束后执行清理逻辑,无论Promise是解决还是拒绝。这样可以确保执行必要的操作,并维护代码的整洁和可读性。

Asynchronous Iteration(异步迭代):

async function fetchData() {
    
    
  const urls = ['https://api.example.com/data1', 'https://api.example.com/data2'];
  for await (const response of fetchAsync(urls)) {
    
    
    console.log(response);
  }
}

async function* fetchAsync(urls) {
    
    
  for (const url of urls) {
    
    
    yield await fetch(url).then(response => response.json());
  }
}

异步迭代允许在处理异步数据源时使用for-await-of循环,可以便捷地处理一系列异步操作。

Rest/Spread Properties(剩余和扩展属性):

const {
    
     x, y, ...rest } = {
    
     x: 1, y: 2, z: 3, a: 4 };
console.log(x); // 1
console.log(y); // 2
console.log(rest); // { z: 3, a: 4 }

剩余和扩展属性让你能够从对象中提取特定属性,并将其余的属性放入一个单独的对象中。

RegExp named capture groups(正则表达式命名捕获组)

const regex = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
const match = regex.exec('2023-06-25');
console.log(match.groups.year); // 2023
console.log(match.groups.month); // 06
console.log(match.groups.day); // 25

正则表达式现在支持命名捕获组,可以使用语法为捕获组命名,并通过.groups属性访问捕获的结果。

Promise.prototype.catch()参数可以省略

fetch('https://api.example.com/data')
  .then(response => response.json())
  .catch(() => {
    
    
    console.log('An error occurred.');
  });

在ES9中,可以在catch()方法中省略错误参数,如果不需要访问错误对象,可以直接定义一个空的catch块。

猜你喜欢

转载自blog.csdn.net/weixin_48998573/article/details/131374443