简介
ES9 的新特性之一是 Symbol.for() 方法和 for await...of 循环。Symbol.for() 方法是一个全局注册表,它为每个给定的键创建一个唯一的符号。它可以消除全局冲突和命名空间污染,而 for await...of 循环是一个更高级的迭代器,可以在异步环境中实现更有效的代码。
Symbol.for() 方法
Symbol.for() 方法是 Symbol 对象的一个静态方法,它返回一个已命名的符号。如果给定的键已经存在则返回该键的现有符号,否则将为给定的键创建一个新符号。
使用示例:
const s1 = Symbol.for("app.company.name"); const s2 = Symbol.for("app.company.name"); console.log(s1 === s2) // true console.log(Symbol.keyFor(s1)) // app.company.name console.log(Symbol.keyFor(s2)) // app.company.name
在示例中,我们创建了两个名为"app.company.name"的符号,在比较它们时会发现两个符号是相等的。这是因为 Symbol.for() 方法返回的是已命名的符号对象。
for await...of 循环
for await...of 循环是一个异步循环迭代器,可以在异步程序中使用。它允许我们在迭代异步数据流时使用 await 表达式,从而实现更高效的异步编程。
使用示例:
async function getData() { const response = await fetch('https://jsonplaceholder.typicode.com/todos/'); const dataStream = await response.body; const reader = dataStream.getReader(); while (true) { const {done, value} = await reader.read(); if (done) { break; } console.log(value); } } getData();
在示例中,我们定义了一个名为 getData() 的异步函数,该函数使用了 fetch() 方法向远程服务器获取数据。然后创建一个读取器对象,该对象可以迭代从服务器返回的数据流。最后,我们使用 while 循环遍历数据流并打印每个数据块的值。注意到 while 循环最后有一个判断,它判断了数据流是否完成并退出循环。
学习指导
ES9 中的 Symbol.for() 方法和 for await...of 循环是现代 JavaScript 开发的两个重要工具。Symbol.for() 方法可用于创建全局唯一的符号,消除命名空间的污染和全局冲突。for await...of 循环则提供了一种更高效的异步迭代器,方便开发者处理异步数据流。对于那些希望使用最新 JavaScript 功能来创建更健壮和高效代码的开发者而言,这些新特性是必须掌握的。
在学习这些新特性时,可以贯彻以下理念:
- 理解 Symbol.for() 方法如何创建唯一不变的符号。
- 掌握 for await...of 循环如何使用 await 表达式来遍历异步数据流。
- 学会如何将新特性与现有技术(如异步函数,闭包和迭代器)相结合,以创建更高效和健壮的代码。
结论
Symbol.for() 方法和 for await...of 循环是 ES9 中的新特性,可用于创建全局唯一符号和更高效地迭代异步数据流。对于那些希望使用最新 JavaScript 功能来创建更健壮和高效代码的开发者而言,这些新特性是必须掌握的。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/66f74ac3c5c563ced5942304