for...in element returns 字符串数组的产量

Yield of for...in element returns strings array

我尝试打印一个由 yield 生成的数组,如果我使用 for...in 语句,它会创建一个字符串数组,同时使用常规 for 循环,它可以正常工作。
为什么会这样?

function *hello1(elements) {
    for(var el in  elements) yield el;
}
function *hello2(elements) {
    for(var i=0;i<elements.length;i++) yield elements[i];
}

var elements = [1,2,3];
console.log(elements);
console.log([...hello1(elements)]);
console.log([...hello2(elements)]);

获取元素需要for ... of statement.

for ... in statement 迭代对象的键(不带符号)和 returns 字符串。

function* hello1(elements) {
    for (var el of elements) yield el;
}

var elements = [1, 2, 3];

console.log([...hello1(elements)]);

一个更短的方法 returns 只是数组可以用 yield* expression 迭代。

function* hello1(elements) {
    yield* elements;
}

var elements = [1, 2, 3];

console.log([...hello1(elements)]);

您打算使用 for...of, not for...in which is for iterating over the enumerable keys of a target object. You can also use yield* 而不是 for...ofyield:

function* hello1(elements) {
  for (var el of elements) yield el;
}

function* hello2(elements) {
  yield* elements;
}

var elements = [1, 2, 3];
console.log(elements);
console.log([...hello1(elements)]);
console.log([...hello2(elements)]);