你一定要知道的ES2017(ES8)新特性

366 阅读2分钟

异步函数(Async Functions)

ES2017引入了一种新的异步编程模型,称为异步函数(Async Functions)。这种语法使得异步代码的编写更加容易和直观。

异步函数使用 async 关键字来标记一个函数,表明这个函数是异步的。这个函数可以使用 await 关键字来暂停执行,等待异步操作完成。当异步操作完成后,异步函数会自动恢复执行,并返回异步操作的结果。

以下是一个使用异步函数的示例:

async function fetchData(url) {
  const response = await fetch(url);
  const data = await response.json();
  return data;
}

fetchData('https://example.com/api/data')
  .then(data => {
    console.log(data);
  })
  .catch(error => {
    console.error(error);
  });

在这个示例中,fetchData() 函数是一个异步函数,它使用 await 关键字暂停执行,等待异步操作 fetch() 和 response.json() 完成。一旦异步操作完成,异步函数会自动恢复执行,并返回异步操作的结果。在这个示例中,异步函数返回了从 API 中获取到的数据。

需要注意的是,异步函数返回的是一个 Promise 对象,因此我们可以使用 .then() 和 .catch() 方法来处理异步操作的结果和错误。

Object.values() 和 Object.entries()

ES2017中还引入了两个新的方法,分别是 Object.values() 和 Object.entries()。这两个方法都是用来遍历对象的属性并返回一个数组。

Object.values() 方法返回一个由对象的所有值组成的数组。例如:

const obj = { foo: 'bar', baz: 42 };
console.log(Object.values(obj)); // ['bar', 42]

Object.entries() 方法返回一个由对象的所有键值对组成的数组。每个键值对都是一个数组,第一个元素是键,第二个元素是值。例如:

const obj = { foo: 'bar', baz: 42 };
console.log(Object.entries(obj)); // [['foo', 'bar'], ['baz', 42]]

这两个方法都可以用于遍历对象的属性,使得代码更加简洁和易读。需要注意的是,这两个方法都只会遍历对象自身的可枚举属性,不会包括继承的属性。

这就是ES2017中引入的两个新方法,它们都为开发者提供了一种更方便的方法来遍历对象的属性。