资讯专栏INFORMATION COLUMN

突然觉得自己好像没学过JS

junfeng777 / 1642人阅读

摘要:既然已经发布,就可能有好事者拿出去当面试题。循环的终止条件简单且明确即使在循环体内修改了数组,也能有效的终止循环。提前确定了循环终止条件,避免多次计算数组长度。

先看题:mean的值是什么?
var scores = [10,11,12];
var total = 0;

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

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

恭喜你:答错了!

是1?

恭喜你:答错了!

正确答案: 4

解释: for in 循环循环的值永远是key, key是一个字符串。所以total的值是:"0012"。它是一个字符串,字符串"0012"/3,0012会被转换成12,然后除以3,结果是4。

后记

这个示例是来自《编写高质量JavaScript的68个方法》的第49条:数组迭代要优先使用for循环而不是for in循环
既然已经发布,就可能有好事者拿出去当面试题。这个题目很有可能坑一堆人。其中包括我。

这里涉及到许多js的基础知识.

for in 循环是循环对象的索引属性,key是一个字符串。

数值类型和字符串相加,会自动转换为字符串

字符串除以数值类型,会先把字符串转为数值,最终结果为数值

正确方法

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);

这样写有几个好处。

循环的终止条件简单且明确

即使在循环体内修改了数组,也能有效的终止循环。否则就可能变成死循环。

编译器很难保证重启计算scores.length是安全的。

提前确定了循环终止条件,避免多次计算数组长度。这个可能会被一些浏览器优化。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/82183.html

相关文章

  • 什么是消息队列?

    摘要:系统拿不再经过系统,而是从消息队列里边拿。高可用无论是我们使用消息队列来做解耦异步还是削峰,消息队列肯定不能是单机的。最后本文主要讲解了什么是消息队列,消息队列可以为我们带来什么好处,以及一个消息队列可能会涉及到哪些问题。 前言 只有光头才能变强。文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 公司用到的很多技...

    sourcenode 评论0 收藏0
  • 前端面试系列--前言篇

    摘要:这个系列的文章将记录我准备春招的整个过程,我会将自己学习到的新知识记录在这个系列里文章目录前言说明准备方向目标前言说明作为半个科班出身学数学的应届生,在学习计算机的时候还是比较吃力的,从今年月份开始接触前端,到现在也有个月左右了。 这个系列的文章将记录我准备春招的整个过程,我会将自己学习到的新知识记录在这个系列里 文章目录 前言说明 准备方向 目标 前言说明   作为半个科班出身...

    sshe 评论0 收藏0
  • 前端面试系列--前言篇

    摘要:这个系列的文章将记录我准备春招的整个过程,我会将自己学习到的新知识记录在这个系列里文章目录前言说明准备方向目标前言说明作为半个科班出身学数学的应届生,在学习计算机的时候还是比较吃力的,从今年月份开始接触前端,到现在也有个月左右了。 这个系列的文章将记录我准备春招的整个过程,我会将自己学习到的新知识记录在这个系列里 文章目录 前言说明 准备方向 目标 前言说明   作为半个科班出身...

    zsirfs 评论0 收藏0
  • 前端面试系列--前言篇

    摘要:这个系列的文章将记录我准备春招的整个过程,我会将自己学习到的新知识记录在这个系列里文章目录前言说明准备方向目标前言说明作为半个科班出身学数学的应届生,在学习计算机的时候还是比较吃力的,从今年月份开始接触前端,到现在也有个月左右了。 这个系列的文章将记录我准备春招的整个过程,我会将自己学习到的新知识记录在这个系列里 文章目录 前言说明 准备方向 目标 前言说明   作为半个科班出身...

    Freelander 评论0 收藏0
  • 码农,有趣的灵魂...

    摘要:本文旨在用最通俗的语言讲述最枯燥的基本知识今日,看到有些文章对码农和程序员做了一些界限划定和差异分析,吓得作者赶紧研究一下自己属于哪个身份,但当仔细查看了这些文章后,发现其实对于写代码的人来说,无非就像周星驰嘴里的龙套和演员之分,顿时感悟, 本文旨在用最通俗的语言讲述最枯燥的基本知识 今日,看到有些文章对码农和程序员做了一些界限划定和差异分析,吓得作者赶紧研究一下自己属于哪个身份,但当...

    szysky 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<