问题
在 ES9 中,如果你尝试使用 Array.prototype.forEach()
方法遍历数组,你可能会遇到以下错误:
TypeError: {} is not iterable (cannot read property Symbol(Symbol.iterator))
这个错误的出现是因为在 ES9 中,当使用 forEach()
方法时,如果传入的参数不是一个可迭代的对象,就会出现这个错误。
解决方法
解决这个错误的方法很简单,你只需要将传入 forEach()
方法的参数转换成可迭代的对象就行了。有几种方法可以做到这一点。
方法一:使用 Array.from()
你可以使用 Array.from()
方法将类数组对象转换为真正的数组,然后再使用 forEach()
方法遍历数组。
const obj = { length: 3, 0: "a", 1: "b", 2: "c" }; const arr = Array.from(obj); arr.forEach(item => console.log(item)); // 输出:a b c
方法二:使用展开运算符
你可以使用展开运算符...
将类数组对象转换为数组,然后再使用 forEach()
方法遍历数组。
const obj = { length: 3, 0: "a", 1: "b", 2: "c" }; const arr = [...obj]; arr.forEach(item => console.log(item)); // 输出:a b c
案例
下面我们来看一个具体的案例。假设我们有一个类数组对象,我们想要遍历它并将每个值乘以 2。 如果我们直接使用 forEach()
方法,就会出现上述错误:
const obj = { length: 3, 0: 1, 1: 2, 2: 3 }; obj.forEach(item => console.log(item * 2)); // TypeError: {} is not iterable (cannot read property Symbol(Symbol.iterator))
我们可以使用上述两种方法中的任意一种解决这个问题:
-- -------------------- ---- ------- -- ------ ------------ ----- --- - ---------------- ---------------- -- ---------------- - ---- -- ---- - - -- ----------- ----- --- - --------- ---------------- -- ---------------- - ---- -- ---- - -
总结
在 ES9 中,使用 Array.prototype.forEach()
方法时,如果传入的参数不是可迭代的对象,就会出现类型错误。为了解决这个问题,我们可以使用 Array.from()
方法或展开运算符将类数组对象转换为数组,然后再使用 forEach()
方法遍历数组。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64840a3048841e989433a8e6