📜  JavaScript Symbol.iterator 属性

📅  最后修改于: 2022-05-13 01:56:42.881000             🧑  作者: Mango

JavaScript Symbol.iterator 属性

它是Iterables的一个对象,也是一种广义数组。使任何对象更容易在 for..of 循环中使用的迭代。我们知道数组本质上是迭代的,但除此之外,还有几个对象用于迭代目的。假设如果任何对象不是数组但确实拥有一组列表、集合等,那么 for..of 可以用来迭代它。

我们使用 for..of 循环来表示任意区间的范围对象。它决定 for..of 循环的工作范围并迭代循环。

我们将使用 Symbol.iterator 方法(JavaScript 中的内置方法)来迭代上面提到的范围对象。此方法的工作步骤:

  1. 一旦 for..of 循环开始,它首先检查错误,如果没有找到,则访问方法和带有方法的对象。
  2. 之后 for..of 循环将在对象上运行。
  3. 要获取下一个即将到来的值,它会为该输出对象调用 next() 方法。
  4. 返回的值将采用 {done: Boolean, value: any} 的形式。当 done=true 返回时,循环将被视为完整循环。

句法:

[Symbol.iterator]

特征:

  • 该范围本身不会有 next() 方法。
  • 当我们打电话给 range[Symbol.iterator](),形成一个迭代器,方法 next() 将生成进一步迭代的值。

例子:

Javascript
let range = {
  from: 2,
  to: 7
};
  
range[Symbol.iterator] = function() {
  
  return {
    now: this.from,
    end: this.to,
    next() {
      if (this.now <= this.end) {
        return { done: false, value: this.now++ };
      } else {
        return { done: true };
      }
    }
  };
};
  
for (let i of range) {
  console.log(i); 
}


输出:

2
3
4
5
6
7