类型错误:“X”在 JavaScript 中不可迭代

TypeError: ‘X’ 在 JavaScript 中不可迭代

TypeError: ‘X’ is not iterable in JavaScript

“TypeError: ‘X’ is not iterable” 当使用for...of带有不可迭代的右侧值(例如对象)的循环时发生。

要解决该错误,请使用Object.keys()Object.values()方法获取可以使用for...of循环的数组。

typeerror 不可迭代

下面是错误如何发生的示例。

索引.js
const obj = {name: 'Tom', age: 30}; // ⛔️ TypeError: obj is not iterable for (const key of obj) { console.log(key); }

我们使用
for…of
循环来尝试迭代一个对象。

由于对象不可迭代,我们得到“TypeError: obj is not iterable”。

在 JavaScript 中迭代对象

相反,您应该使用
Object.keys()
Object.values()

Object.entires()
方法来获取可以使用
for...of循环的数组。

索引.js
const obj = {name: 'Tom', age: 30}; // ✅ Using Object.keys() for (const key of Object.keys(obj)) { console.log(key); // 👉️ name, age console.log(obj[key]); // 👉️ 'Tom', 30 } // ✅ Using Object.values() for (const value of Object.values(obj)) { console.log(value); // 👉️ Tom, 30 } // ✅ Using Object.entries() for (const entry of Object.entries(obj)) { console.log(entry); // 👉️ ['name', 'Tom'], ['age', 30] }

我们只能迭代可迭代的值,例如数组、字符串、Map、Set、生成器等。

在使用循环之前,我们使用该Object.keys方法获取对象键的数组。for...of

同样,您可以使用Array.forEach()方法遍历数组。

索引.js
const obj = {name: 'Tom', age: 30}; Object.keys(obj).forEach((key, index) => { console.log(key); // 👉️ name, age console.log(obj[key]); // 👉️ 'Tom', 30 console.log(index); // 👉️ 0, 1 });

Object.values()方法返回对象值的数组。

索引.js
const obj = {name: 'Tom', age: 30}; // ✅ Using Object.values() for (const value of Object.values(obj)) { console.log(value); // 👉️ Tom, 30 }
Object.entries()方法返回一个数组数组,其中每个嵌套数组包含 2 个元素 – 键和对应的值 – [key, value]
索引.js
const obj = {name: 'Tom', age: 30}; // ✅ Using Object.entries() for (const entry of Object.entries(obj)) { console.log(entry); // 👉️ ['name', 'Tom'], ['age', 30] }

迭代一个生成器函数

如果需要迭代生成器函数,请使用for...of循环。

索引.js
function* generator(a, b, c) { yield a; yield b; yield c; } for (const num of generator(5, 10, 15)) { console.log(num); // 👉️ 5, 10, 15 }
请注意,我们必须调用该函数才能返回我们可以迭代的生成器对象。

如果您忘记调用该函数,您将得到“TypeError: ‘X’ is not iterable”。

索引.js
function* generator(a, b, c) { yield a; yield b; yield c; } // ⛔️ TypeError: generator is not iterable for (const num of generator) { console.log(num); }

我们忘记调用函数,所以我们将函数的右侧值传递给for...of循环,这导致了错误。

结论

“TypeError: ‘X’ is not iterable” 当使用for...of带有不可迭代的右侧值(例如对象)的循环时发生。

要解决该错误,请使用Object.keys()Object.values()方法获取可以使用for...of循环的数组。