ES10 中的 Symbol.&Symbol.asyncIterator 的使用介绍

阅读时长 4 分钟读完

在 JavaScript 中,Symbol 是一种新的原始数据类型,用于创建一个唯一的标识符。在 ES10 中,Symbol 引入了两个新的标识符:Symbol.&Symbol.asyncIterator。它们的使用非常有意义,本文将详细介绍它们的使用方法。

Symbol

Symbol 是一种新的原始数据类型,用于表示一个唯一的、不可变的标识符。它可以通过 Symbol() 函数创建,创建 Symbol 的时候,可以给它一个可选的描述字符串。

在 JavaScript 中,每个 Symbol 都是唯一的,两个 Symbol 比较的结果一定是 false。

Symbol 还可以作为对象的属性名使用,这样可以解决同名属性的冲突问题。

Symbol.iterator

Symbol.iterator 是一个用于指定一个对象的迭代器方法的 Symbol。当一个对象实现了 Symbol.iterator 方法时,就可以使用 for...of 循环来迭代这个对象了。

上面的代码中,myArray 实现了 Symbol.iterator 方法,返回了一个迭代器对象 iterator,然后使用 for...of 循环迭代了这个迭代器对象。

实际上,Array、Map、Set、String、TypedArray 等内置对象都实现了 Symbol.iterator 方法,也就可以使用 for...of 循环来迭代它们了。

Symbol.asyncIterator

在 ES10 中,还新增了一个用于指定异步迭代器方法的 Symbol:Symbol.asyncIterator。当一个对象实现了 Symbol.asyncIterator 方法时,就可以使用 for await...of 循环来异步迭代这个对象了。

-- -------------------- ---- -------
----- ----- - ---- -- --- --------------- -- ------------------- -----

----- --------------- - -
  ----- ------------------------- -
    --- ---- - - -- - -- -- ---- -
      ----- ------------
      ----- --
    -
  -
--

------ -- -- -
  --- ----- ------ ----- -- ---------------- -
    -------------------
  -
-----

上面的代码中,myAsyncIterable 实现了 Symbol.asyncIterator 方法,返回了一个异步迭代器对象。然后使用 for await...of 循环,迭代了这个异步迭代器对象。

需要注意的是,只有实现了 Symbol.asyncIterator 方法的对象,才能使用 for await...of 循环来异步迭代。

总结

Symbol 和 Symbol.iterator、Symbol.asyncIterator 都是在 ES6、ES10 中新增的标识符。它们的引入非常有意义,让我们可以更好地管理对象和异步操作,提高代码的可读性、可维护性。

值得一提的是,对于一些功能比较强大的库或框架,也可以通过实现 Symbol.iterator、Symbol.asyncIterator 方法来为用户提供更好的迭代功能。

如果你还没有尝试过 Symbol 和 Symbol.iterator、Symbol.asyncIterator,那么现在就是时候去尝试一下了。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e2de12f6b2d6eab3e2a00d

纠错
反馈