ECMAScript 2018 或称 ES9 ,是 JavaScript 的最新版本。它包含了各种新特性,这些特性都为前端开发提供了新的能力。在本文中,我们将会探究 ES9 新特性,包括异步迭代器、 Promise.finally() 和 Rest/Spread 属性。
异步迭代器
在过去的几年中,Promise 的出现改变了 JavaScript 中异步编程的方式,而在 ES9 中,有一个新的特性异步迭代器,可以进一步简化异步操作的开发。
异步迭代器与常规迭代器的区别在于,它们返回的值是一个 Promise 对象。这使得我们可以在异步操作完全完成之前,暂停迭代器的执行。
例如,我们可以使用异步迭代器来迭代一个异步数据集合:
-- -------------------- ---- ------- ----- ----- - ------ -- --- --------------- -- ------------------- ------ ----- --------- ---------------- - ----- ------------ ----- -- ----- ------------ ----- -- ----- ------------ ----- -- - ------ ---------- - ----- --------- - ----------------- --- ----- ------ --- -- ---------- - ----------------- - -----
在上面的代码中,“asyncGenerator”是一个异步迭代器函数。它将异步等待一段时间后生成一些数字,然后将他们作为 Promise 对象返回。在主函数中,使用“for await”循环来迭代异步生成器对象并打印出每个数字。
Promise.finally()
在 ES9 中,Promise 对象中新增了一个方法“finally()”。该方法传入一个回调函数,并且在 Promise 对象状态变为“resolved”或“rejected”时都会被执行。
例如:
Promise.resolve('hello, world!') .finally(() => console.log('finally!'));
当 Promise 对象执行完后,无论状态是什么,“finally()”方法中的回调函数都会被执行。
Rest/Spread 属性
在 ES8 中,我们已经可以使用对象和数组的 Rest/Spread 运算符来简化代码。在 ES9 中,我们可以工具这个特性来更新对象字面量和函数参数中的语法。
对象字面量的 Rest/Spread 属性
Rest/Spread 属性可以方便地从其他对象中扩展属性,同时也可以将对象字面量合并为一个新的对象。
例如:
const obj1 = { a: 1, b: 2, c: 3 }; const obj2 = { ...obj1, d: 4, e: 5 }; console.log(obj2); // { a: 1, b: 2, c: 3, d: 4, e: 5 }
在上面的代码中,“...obj1”将会把“obj1”的属性作为一个集合,再通过“d”和“e”添加到一个新的对象中。
函数参数中的 Rest/Spread 属性
我们也可以在函数参数中使用 Rest/Spread 属性,它们可以将函数参数转换为一个数组,或者快速的将传入的对象转换为函数参数。
例如:
function myFunc(a, b, ...params) { console.log(params); } myFunc(1, 2, 3, 4, 5); // [3, 4, 5]
在这个例子中,“params”参数通过使用 Rest 运算符来捕获一个数组,其中包含了传递给函数的任何其他参数。
结论
以上就是 ES9 的新特性。有了这些功能,前端开发人员可以更加便捷的使用 JavaScript 来构建高质量的 Web 应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67061c29d91dce0dc85864c3