全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Javascript中for循环语句的几种写法总结对比

前言

for循环我们在js遍历对象或数组时都会有用到了,今天我们一起来看一些关于for循环的一些使用例子了,具体的操作细节如下文介绍。

一般写法如下:

for(var i = 0;i< arr.length;i++) {
 var a = arr[i];
 //...
 }

这就是一个常见的,正序循环的for循环。这样写的缺点大家都明白:每次都从arr里取length与i来对比,浪费性能(而且,要是arr的长度是动态变化的,就会出现死循环)。改进这个循环的办法是用变量保存arr.length

for(var i = 0, al = arr.length;i< al;i++) {
 var a = arr[i];
 //...
 }

这样比第一种可以略微提升点性能,要是数组长,可以提升更多。

不过这样写就多了个变量al,且这个变量只在用来与i对比的时候有用,看着有点鸡肋。

如果循环顺序对你不重要,那你可以尝试倒序循环:

for(var i = arr.length-1;i > -1;i--) {
 var a = arr[i];
 //...
 }

这样一来变量少些,且还缓存过arr长度,性能也不错。但这里的代码写得有点拙劣(我故意的),首先是i = arr.length-1(居然要-1,靠),然后是循环继续执行的条件i > -1,都让有洁癖的人无法忍受。

下面是我常用的倒序for循环写法:

for(var i = arr.length;i--;) {
 var a = arr[i];
 //...
 }

这已经非常精简了。原理需要理解一下:for循环继续执行的条件,是;;之间的这个判断要为真,而这里的i–,在第一次循环进来的时候,i=arr.length,i–值不变(为什么不变?因为要在for循环体里面,才会发现i变了);当i=1时,i- -还是1,但进入循环体后,就是0了,所以可以正常执行最后一次循环;当i=0时,i–还是0,而0已经不为真了,所以循环就不会继续执行了。

大家注意到上面的所有代码的for循环体里,都有个var a = arr[i] ,用来取出当前循环到的数组项。这实际上也是种浪费,且jsLint等会告诉你:不要在循环里声明变量。。。

倒序的for可以精简至斯,但我就是要正序,而且要效率高,变量少,怎么办?

如下:

for(var i = 0, a;a = arr[i++];) {
 //...
 }

这种写法好处在于:几乎不可避免的arr.length不见了,前面说的取出当前循环到的数组项的那一句也不见了。

原理:

a = arr[i++] ,在这里作为循环能执行的条件,注意这里只有一个=号,所以这不是判断句,是赋值语句,就是把arr[i++]赋给a,然后判断a是不是真值。i++与i–的原理类型我就不说了,只说当i++已经超过数组的长度时,循环肯定要停止才行,而这里真的就停止了,为什么?因为a=arr[i++] ,如果取到了超出数组本身长度的项,只会取得一个undefined,而undefined是假值,循环条件就判断失败了。

当然,这样写的缺点也很明显:

     1,当arr的长度动态变化时,依然会产生死循环————因为我们从来没缓存过arr.length呀。

     2,如果循环的是一个数字数组,当取出的项(即a的值)为0时,就会中止循环(因为0是假值)。

     3,当数组中某一项是假值时(包括空字符串,0,null,undefined),同样会中止循环

所以大家用这种写法时,最好排除掉上面的情况再用。

这个原理同样可以用在倒序循环上。

最后我要忠告大家几句:

  1. 代码精简不等于效率高!
  2. 不要为了故意精简代码而丧失性能

顺带说几点提高for循环性能的要点:

     1,适时break!不需要遍历全部的就要加跳出条件!

     2,不要在for循环体里声明变量(建议一次var,多次赋值)

     2,数组长度缓存,尽量少变量

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流。


# js  # for循环的几种写法  # js中for循环语句写法  # for循环快捷写法  # javascript 循环语句 while、do-while、for-in、for用法区别  # js使用for循环及if语句判断多个一样的name  # javascript中的循环语句for语句深入理解  # 用循环或if语句从json中取数据示例  # JavaScript中对循环语句的优化技巧深入探讨  # JavaScript for循环 if判断语句(学习笔记)  # 简单学习JavaScript中的for语句循环结构  # 详解JavaScript中循环控制语句的用法  # 详细谈谈JavaScript中循环之间的差异  # 就会  # 遍历  # 的人  # 是一个  # 看着  # 我就  # 我要  # 也不  # 在这里  # 有个  # 大家都  # 一句  # 不需要  # 如有  # 才会  # 告诉你  # 不要在  # 对你  # 但我  # 从来没 


相关文章: 武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  建站之星如何修改网站生成路径?  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  如何获取免费开源的自助建站系统源码?  如何快速打造个性化非模板自助建站?  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  如何通过NAT技术实现内网高效建站?  css网站制作参考文献有哪些,易聊怎么注册?  建站之星ASP如何实现CMS高效搭建与安全管理?  已有域名如何免费搭建网站?  如何选择高效便捷的WAP商城建站系统?  如何在云指建站中生成FTP站点?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  ,有什么在线背英语单词效率比较高的网站?  建站之星安装后如何配置SEO及设计样式?  怎么将XML数据可视化 D3.js加载XML  如何快速搭建虚拟主机网站?新手必看指南  如何快速使用云服务器搭建个人网站?  利用JavaScript实现拖拽改变元素大小  小型网站建站如何选择虚拟主机?  如何在阿里云ECS服务器部署织梦CMS网站?  网站制作免费,什么网站能看正片电影?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  音乐网站服务器如何优化API响应速度?  建站之星后台管理系统如何操作?  建站之星如何优化SEO以实现高效排名?  成都网站制作报价公司,成都工业用气开户费用?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  盐城做公司网站,江苏电子版退休证办理流程?  如何通过宝塔面板实现本地网站访问?  如何在建站主机中优化服务器配置?  如何高效利用亚马逊云主机搭建企业网站?  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  如何在服务器上三步完成建站并提升流量?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  想学网站制作怎么学,建立一个网站要花费多少?  如何选择可靠的免备案建站服务器?  制作门户网站的参考文献在哪,小说网站怎么建立?  定制建站如何定义?其核心优势是什么?  如何在阿里云高效完成企业建站全流程?  ,购物网站怎么盈利呢?  广平建站公司哪家专业可靠?如何选择?  如何用美橙互联一键搭建多站合一网站?  建站之星代理如何获取技术支持?  如何用免费手机建站系统零基础打造专业网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。