
JavaScriptSymbol.iterator 是一个非常强大的工具,每个 Web 开发人员都应该学习如何使用它。它允许您定义和自定义值的迭代方式,有效地使您可以使任何值可迭代。您可以轻松地将这些知识应用于纯 JavaScript 对象甚至类。
正确定义迭代器所需的只是生成每个迭代值的生成器函数JavaScriptSymbol.iterator是一个非常强大的工具,每个 Web 开发人员都应该学习如何使用它。它允许您定义和自定义值的迭代方式,有效地使您可以使任何值可迭代。您可以轻松地将这些知识应用于纯 JavaScript 对象甚至类。
正确定义迭代器所需的只是生成yield每个迭代值的生成器函数yield。这可用于检索对象中的键值对、从类中调用特定的 getter 函数或将数字拆分为数字数组。这可用于检索对象中的键值对、从类中调用特定的 getter 函数或将数字拆分为数字数组:
const obj = { a: 1, b: 2, c: 3 };
obj[Symbol.iterator] = function* () {
for (let key of Object.keys(obj)) yield { [key]: obj[key] };
};
[...obj]; // [ { a: 1 }, { b: 2 }, { c: 3 }]
class IterableNumber extends Number {
*[Symbol.iterator]() {
for (let digit of [...`${this}`].map(d => Number.parseInt(d))) yield digit;
}
}
const num = new IterableNumber(1337);
[...num]; // [ 1, 3, 3, 7]