iterators/generators require regenerator-runtime, which is too heavyweight for this guide to allow

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去遍历数组,就不会有报错提示了。
 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别说小李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值