TypeError: ‘X’ 在 JavaScript 中不可迭代
TypeError: ‘X’ is not iterable in JavaScript
“TypeError: ‘X’ is not iterable” 当使用for...of
带有不可迭代的右侧值(例如对象)的循环时发生。
要解决该错误,请使用Object.keys()
或Object.values()
方法获取可以使用for...of
循环的数组。
下面是错误如何发生的示例。
索引.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
循环的数组。