ECMAScript 2018(简称 ES2018)是 JavaScript 的最新版本,其中推出了一些新的功能和特性,本文将重点介绍异步生成器、Promise.prototype.finally() 和 Rest/Spread 操作符。
异步生成器
异步生成器是 ES2018 中的一个新特性,它允许我们在生成器函数中使用异步操作。换句话说,异步生成器可以返回异步迭代器。
在异步生成器中,我们可以使用 yield
关键字来暂停迭代并返回一个 Promise 对象。在异步操作完成后,我们可以使用 await
关键字来恢复迭代。下面是一个简单的例子:
-- -------------------- ---- ------- ----- --------- ---------------- - ----- ----- ------------------- ----- ----- ------------------- ----- ----- ------------------- - ------ -- -- - --- ----- ---- --- -- ----------------- - ----------------- - ----- ------ - -
在上面的例子中,asyncGenerator()
函数返回了一个异步迭代器。在 for await
循环中,我们可以使用 await
关键字来等待异步生成器返回的 Promise 对象,并使用 yield
暂停迭代。当异步操作完成后,我们可以使用 await
关键字来恢复迭代。
Promise.prototype.finally()
在早期版本的 JavaScript 中,我们经常需要在 Promise 中添加 finally
回调,以确保在 Promise 完成后始终执行一些操作。
ES2018 中,Promise 对象已经添加了 finally
方法。该方法接受一个回调函数作为参数,无论 Promise 成功还是失败,该回调函数都会被执行。
下面是一个示例代码:
-- -------------------- ---- ------- ------------------ --------- -- ----------------- ----------- -- -------------------- ------------ ------ ------- -------- ----------------------- ---------- -- ------------------- ----------- -- -------------------- ------------ ---------- ------- --------
在上面的代码中,我们使用 Promise.resolve()
和 Promise.reject()
创建了两个 Promise 对象。在第一个 Promise 中,我们使用 then
方法来输出 Promise 的返回值,并使用 finally
方法来输出字符串。在第二个 Promise 中,我们使用 catch
方法来输出 Promise 的错误信息,并使用 finally
方法来输出字符串。
Rest/Spread 操作符
在 ES6 中,我们已经学习了 Rest 和 Spread 操作符,它们可以让我们轻松地操作数组和对象。在 ES2018 中,Rest/Spread 操作符已经添加了对对象字面量的支持。
下面是一个简单的例子:
const obj1 = { name: "Tom", age: 18 }; const obj2 = { gender: "male", ...obj1 }; console.log(obj2); //输出:{gender: 'male', name: 'Tom', age: 18} const obj3 = { ...obj1, ...obj2 }; console.log(obj3); //输出:{name: 'Tom', age: 18, gender: 'male'}
在上面的代码中,我们使用 ...
操作符将一个对象解构为一个对象字面量,在后面添加一个新的键值对。我们还可以使用 ...
操作符将多个对象字面量合并为一个对象字面量。
总结
在本文中,我们了解了 ES2018 中的三个新特性: 异步生成器、Promise.prototype.finally() 和 Rest/Spread 操作符,并给出了相应的示例代码。学习这些新特性可以让我们在编写 JavaScript 时更加灵活和高效。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6650a83bd3423812e435ee81