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