ECMAScript 2017 中的 Symbol.iterator 变量教程

阅读时长 4 分钟读完

在 ECMAScript 2015 标准发布之后,Symbol 让我们得以创建一些独特的属性,它们是不可变的,即使它们的名称相同。Symbol.iterator 是 ECMAScript 2017 中新增的一个内置 Symbol 变量,它为对象定义了默认的迭代器。本文将介绍 Symbol.iterator 变量的用法和示例。

Symbol.iterator 的定义

Symbol.iterator 实际上是一个 Symbol 值,它代表着一个由对象返回 Iterator 对象的函数。当一个对象使用 for-of 语句进行迭代时,它会使用该对象的 Symbol.iterator 函数来获取能够进行迭代的值。如果该函数不存在,则会抛出一个类型错误。

for-of 循环与 Symbol.iterator

for-of 循环是 ECMAScript 6 版本中的一个新的语法。它可以遍历支持迭代协议的数据结构,比如数组或者 Map。当一个对象使用 for-of 循环时,它会调用该对象的 Symbol.iterator 方法,获取一个 Iterator 对象。该对象将在每次迭代时返回下一个值,直到数据结构的结尾。

以下是使用 for-of 循环遍历一个数组的示例:

在上述代码中,我们创建了一个包含三个字符串的数组 arr,然后使用 for-of 循环对它进行遍历。在每次迭代时,for-of 循环会自动调用 arr 对象的 Symbol.iterator 方法,获取一个 Iterator 对象,并使用它获取下一个值,直到数组 arr 的结尾。

实现一个 Symbol.iterator

当我们需要实现自己的迭代器时,需要在对象上定义一个 Symbol.iterator 函数。该函数应该返回一个具备 next() 方法的对象。该方法应该返回一个对象,包含 value 和 done 两个属性。其中,value 属性代表着上一个迭代器函数的结果,done 属性告诉迭代器是否已经完成了遍历。

以下是一个自定义的”迭代数组内容”的示例:

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

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

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

在上述代码中,我们定义了一个叫做 iterable 的对象,并在该对象上定义了一个 Symbol.iterator 函数。该函数返回了一个对象,它拥有一个 next() 方法,该方法在每次迭代时返回下一个值,直到数据结构的结尾。

在 for-of 循环中,我们调用了 iterable 对象的 Symbol.iterator 方法,获取一个 Iterator 对象,并使用它获取下一个值,直到数据结构的结尾。

总结

本文介绍了 Symbol.iterator 变量的用法和示例。我们首先了解了 Symbol.iterator 的定义,并学习了如何使用 for-of 循环与 Symbol.iterator 进行迭代。随后,我们实现了一个自定义的”迭代数组内容”的示例程序,帮助我们更好地理解 Symbol.iterator 的用法。

通过本文,我们可以深入了解 Symbol.iterator 变量,并且掌握了使用该变量创建自定义迭代器的技能。希望本文能够给前端开发者带来帮助,在学习和开发中更加得心应手。

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

纠错
反馈