欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

for...in/for...of

程序员文章站 2024-03-25 14:35:22
...

昨天晚上又失眠了,偶然看到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