nop*_*ole 8 javascript iterable ecmascript-6
我发现一些迭代可以重复迭代:
const iterable = {
[Symbol.iterator]: function* () {
yield 1;
yield 3;
yield 5;
}
}
console.log([...iterable]);
console.log([...iterable]);
console.log([...iterable]);
Run Code Online (Sandbox Code Playgroud)
虽然有些不能:
function* generatorFn() {
yield 1;
yield 3;
yield 5;
}
const iterable = generatorFn();
console.log([...iterable]);
console.log([...iterable]);
console.log([...iterable]);
Run Code Online (Sandbox Code Playgroud)
是否有一个可迭代对象是否应该重复迭代的规则?
我理解为什么它们的行为不同(这是因为第二种情况,当iterable[Symbol.iterator]
调用函数时,返回相同的迭代器(它iterable
本身。可以尝试iterable[Symbol.iterator]() === iterable
,它也会返回true
。iterable.next
也是一个函数。所以在这种情况下,iterable
是一个生成器object、iterable 和 iterator,所有三个)。但我想知道 iterable 作为对象类型,是否有明确定义的行为是否应该或不应该重复迭代。)