iterators/generators require regenerator-runtime, which is too heavyweight for this guide to allow them. Separately, loops should be avoided in favor of array iterations.
for..in loops iterate over the entire prototype chain, which is virtually never what you want. Use Object.{keys,values,entries}, and iterate over the resulting array
在使用eslint airbnb的规则时候回报出以上的错误,原因是使用了for of 或者 for in 循环。
所以有两个问题产生了
- 为什么不让用?
- 该怎么做才正确?
其实这涉及到了一个相当重要的概念:函数式编程…
比如下面的迭代中:
for (const i of arr) {
if (arr[i] % 2) {
arr[i]+=1;
}
}
// 当arr为[1, 2, 3],我们期望得到[2, 2, 4], 也就是全变为偶数。
// 但实际是[1, 2, 4].
// 原因是i是值而不是索引
以上的例子其实只想说明在循环体改变数组的值,很可能会引起意想不到的问题。这有个官方数据术语副作用
。而这种形式的迭代很容易产生副作用,而函数式编程的函数都应该是纯函数,也就是不应该有副作用。
另外对于 for in,因为他的迭代是可以迭代原型链上所有可迭代的属性,这同样会产生意想不到的问题…
所以你应该使用forEach
map
的这种函数式API去遍历数组,就不会有报错提示了。