TypeError: .for 不可迭代 / array[Symbol.iterator]().next().value 不可迭代。

5

考虑下面这段代码:

let arr = await fetch(...).then(r => r.json());
for(let [a, b] of arr) {
  console.log(a, b);
}

在Chromium/Node.js中,什么会导致加密/不友好的错误信息“不可迭代”的错误消息。而在Firefox中,错误消息则为“Uncaught TypeError:arr [Symbol.iterator]()。next().value不可迭代。”
这个错误消息让我困惑了几分钟,所以我认为,在它们使错误消息更友好之前,有一个SO问题/答案会很有帮助。请看下面的答案。
2个回答

12

这个错误是因为数组中包含了非数组的元素,例如它可能包含像这样的对象:

let arr = [{a:1, b:2}, {a:3, b:4}];

因此,for/of 代码应如下所示:

for(let {a, b} of arr) {
  console.log(a, b);
}

1
在我的情况下,内部对象的值也是数组。结果是 b 是 undefined。你知道为什么吗? - Ooker

0

我在这个情况下找到了一个非常好的答案 这里

需要 ES6,仅适用于数组:

for (const [i, value] of myArray.entries()) {
    console.log('%d: %s', i, value);
}

对于任何类型的可迭代对象:

function* enumerate(iterable) {
    let i = 0;

    for (const x of iterable) {
        yield [i, x];
        i++;
    }
}

for (const [i, obj] of enumerate(myArray)) {
    console.log(i, obj);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接