TypeError: .for is not iterable / array[Symbol.iterator]().n



给定以下代码:

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

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

这让我困惑了几分钟,所以我想,直到他们使这些错误信息更友好,这将有助于有一个问题/答案为它。

这个错误发生是因为数组包含非数组-例如它可能包含这样的对象:

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

所以for/of代码应该是这样的:

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

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

需要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);
}

相关内容

最新更新