for...in/for...of

昨天晚上又失眠了,偶然看到segmentfault上的一个js题目:

    var scores = [10,11,12];
    var total = 0;

    for(var score in scores){
      total += score;
    }

    var mean = total/scores.length;
    console.log(mean);

刚开始一看觉得答案是 1 …

结果一看答案,发现了自己平时没注意到的一点:
for in 循环是循环对象的索引属性,key是一个字符串.

所以 分析一波:
1.for in循环 遍历的key值是字符串
2.total进行了字符串拼接,结果是’0012’
3.total/scores.length ,先把字符串转换成数字12,结果为4

这个示例是来自《编写高质量JavaScript的68个方法》的第49条:数组迭代要优先使用for循环而不是for in循环。

在ES6中,可以用for-of循环语句通过方法调用来遍历各种集合.

    var scores = [10,11,12];
    var total = 0;

    for(var score of scores){
      total += score;
    }

    var mean = total/scores.length;
    console.log(mean);

输出为11

参考文献:
https://segmentfault.com/a/1190000008823431
http://www.infoq.com/cn/articles/es6-in-depth-iterators-and-the-for-of-loop

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值