JavaScript Symbol.iterator 属性
它是Iterables的一个对象,也是一种广义数组。使任何对象更容易在 for..of 循环中使用的迭代。我们知道数组本质上是迭代的,但除此之外,还有几个对象用于迭代目的。假设如果任何对象不是数组但确实拥有一组列表、集合等,那么 for..of 可以用来迭代它。
我们使用 for..of 循环来表示任意区间的范围对象。它决定 for..of 循环的工作范围并迭代循环。
我们将使用 Symbol.iterator 方法(JavaScript 中的内置方法)来迭代上面提到的范围对象。此方法的工作步骤:
- 一旦 for..of 循环开始,它首先检查错误,如果没有找到,则访问方法和带有方法的对象。
- 之后 for..of 循环将在对象上运行。
- 要获取下一个即将到来的值,它会为该输出对象调用 next() 方法。
- 返回的值将采用 {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