JavaScript ES9新特性

2023-06-27 09:45:32 浏览数 (1)


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

Object spread syntax(对象扩展语法)

代码语言:javascript复制
const obj1 = { a: 1, b: 2 };
const obj2 = { c: 3, ...obj1 };
console.log(obj2); // { c: 3, a: 1, b: 2 }

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

Promise.prototype.finally()

代码语言:javascript复制
fetch('https://api.example.com/data')
  .then(response => response.json())
  .finally(() => {
    console.log('Fetch request completed.');
  });

finally()方法在Promise被解决或拒绝后,无论如何都会执行。它允许你指定在Promise结束时必须执行的清理逻辑。

Asynchronous Iteration(异步迭代):

代码语言:javascript复制
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(剩余和扩展属性):

代码语言:javascript复制
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(正则表达式命名捕获组)

代码语言:javascript复制
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

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

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

代码语言:javascript复制
fetch('https://api.example.com/data')
  .then(response => response.json())
  .catch(() => {
    console.log('An error occurred.');
  });

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

0 人点赞