使任何JavaScript值可迭代
JavaScript的Symbol.iterator
是一个非常强大的工具,每个Web开发人员都应该学会如何使用它。它允许你定义和自定义值的迭代方式,从而使任何值都可以进行迭代。你可以轻松地将这个知识应用到普通的JavaScript对象甚至类中。
你只需要正确定义一个生成器函数,使用yield
返回每个迭代值。这可以用于从对象中获取键值对、从类中调用特定的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]