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

joe*_*joe 6 javascript iterator node.js

鉴于此代码:

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

.for is not iterable什么可能导致Chromium/Node.js 中出现神秘/无用的错误消息?在 Firefox 上,错误消息是Uncaught TypeError: arr[Symbol.iterator]().next().value is not iterable

这让我困惑了几分钟,所以我想,在他们使这些错误消息变得更加友好之前,有一个这样的问题/答案会很有帮助。请参阅下面的答案。

joe*_*joe 13

发生此错误是因为数组包含非数组 - 例如它可能包含如下对象:

let arr = [{a:1, b:2}, {a:3, b:4}];
Run Code Online (Sandbox Code Playgroud)

所以for/of代码应该如下所示:

for(let {a, b} of arr) {
  console.log(a, b);
}
Run Code Online (Sandbox Code Playgroud)