var scores = [10,11,12]; var total = 0; for(var score in scores){ total += score; } var mean = total/scores.length; console.log(mean);
恭喜你:答错了!面试
恭喜你:答错了!数组
解释: for in 循环循环的值永远是key, key是一个字符串
。因此total的值是:'0012'。它是一个字符串,字符串'0012'/3,0012会被转换成12,而后除以3,结果是4。浏览器
这个示例是来自《编写高质量JavaScript的68个方法》的第49条:数组迭代要优先使用for循环而不是for in循环
。
既然已经发布,就可能有好事者拿出去当面试题。这个题目颇有可能坑一堆人。其中包括我。安全
这里涉及到许多js的基础知识.优化
for in 循环是循环对象的索引属性,key是一个字符串。
数值类型和字符串相加,会自动转换为字符串
字符串除以数值类型,会先把字符串转为数值,最终结果为数值
正确方法code
var scores = [10,11,12]; var total = 0; for(var i=0, n=scores.length; i < n; i++){ total += scores[i]; } var mean = total/scores.length; console.log(mean);
这样写有几个好处。对象