在 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 循环遍历一个数组的示例:
let arr = ['a', 'b', 'c']; for (let value of arr) { console.log(value); } // Output: // a // b // c
在上述代码中,我们创建了一个包含三个字符串的数组 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