js 数组的for循环到底应该怎么写?


Posted in Javascript onMay 31, 2010

然后来看看今天我开始怀疑哪个权威哦家伙了。。。

自从开始学编程,自从接触到数组这个东西,我就一直在不同的地点和不同的时间不断看到有人提醒:在用for遍历数组的时候一定要用 for(var i=0,n=arr2.length;i<n;i++)的方式哦,而不要用for(var i=0;i>arr.length;i++)的方式哦,因为用脑子想想也知道,第二种方法的第二部分会一直去计算数组的length,所以自然效率比较低。

哦?我们这里不说其他程序语言,而只讨论js,因为不同的语言,实现可能不同,其他语言是什么情况还要靠大家去探索喽。 其实上面说到的所谓的“动脑子想想就知道”也许只是因为大家只是用脑子想了想,而不是仔细想了想或者亲自去试了试。所以现在我们仔细想想,第一种写法真的会比第二种写法快么?arr.length会耗费很多cpu么?不会啊,为什么要耗费cpu呢?arr.length并不是调用了一个方法,而只是读取了一下数组的length属性啊,你认为读取原生属性和读取定义的变量,哪个会快呢? 我认为读取length会更快,所以我写了个测试来测试自己的想法: 我用了一个我自己的小测试框架,

var arr=[],arr2=[],i=0 
while(i<100000){ 
arr.push(i) 
arr2.push(i) 
i++ 
} 
M.TA.begin("0000"); 
for(var i=0;i<arr.length;i++){ 
arr[i]=arr[i]*arr[i]*arr[i] 
} 
M.TA.end("0000","for(var i=0;i<arr.length;i++)") 
M.TA.begin("0001"); 
for(var i=0,n=arr2.length;i<n;i++){ 
arr2[i]=arr2[i]*arr2[i]*arr2[i] 
} 
M.TA.end("0001"," for(var i=0,n=arr2.length;i<n;i++)") 
M.TA.showResult()

当然,这段代码是很变态的,占用了300多兆的内存。 结果如下:
chrome
js 数组的for循环到底应该怎么写?
firefox
js 数组的for循环到底应该怎么写?
(在做过N种性能测试后发现firefox在基础运算上的效率比chrome高很多,只是涉及到渲染的就慢很多了)
ie8
js 数组的for循环到底应该怎么写?
(减少了N个数量级之后的记过,上述脚本在ie里无法运行)
总结:?
其实做这个测试不是为了强调for(var i=0;i<arr.length;i++)的写法快多少,因为测试也是有些许误差的,只是为了说明这种写法并不会慢到哪里去,而且这种写法有一定的灵活性,书写也简单,代码量又少,那我们为什么不用它呢? 如果是第一种写法,在循环的时候数组长度发生变化呢?这种情况就处理不了了吧

其实我还是尊敬权威的,所以写到这里的时候我心里仍然提心吊胆,难道是我哪里搞错了么?如果是,大家就当一笑而过吧,如果不是,那我总算写了篇人模狗样的博文了。。。
转载注明:
http://www.html-js.com

Javascript 相关文章推荐
javascript背投广告代码的完善
Apr 08 Javascript
javascript 拖动表格行实现代码
May 05 Javascript
Jquery 表格合并的问题分享
Sep 17 Javascript
jQuery之ajax删除详解
Feb 27 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
Feb 15 Javascript
jQuery新窗口打开外链接
Jul 21 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
Sep 30 Javascript
基于Vue2.0+ElementUI实现表格翻页功能
Oct 23 Javascript
Angular刷新当前页面的实现方法
Nov 21 Javascript
vue 对axios get pust put delete封装的实例代码
Jan 05 Javascript
基于小程序请求接口wx.request封装的类axios请求
Jul 02 Javascript
javascript操作向表格中动态加载数据
Aug 27 Javascript
javascript 四则运算精度修正函数代码
May 31 #Javascript
ASP 过滤数组重复数据函数(加强版)
May 31 #Javascript
javascript 子窗体父窗体相互传值方法
May 31 #Javascript
js post方式传递提交的实现代码
May 31 #Javascript
JS 类型转换常见方法小结
May 31 #Javascript
javascript 传统事件模型构造的事件监听器实现代码
May 31 #Javascript
LazyLoad 延迟加载(按需加载)
May 31 #Javascript
You might like
《忧国的莫里亚蒂》先导宣传图与STAFF公开
2020/03/04 日漫
PHP Memcached应用实现代码
2010/02/08 PHP
《PHP编程最快明白》第五讲:php目录、文件操作
2010/11/01 PHP
如何使用PHP批量去除文件UTF8 BOM信息
2013/08/05 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
CI框架装载器Loader.php源码分析
2014/11/04 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
JavaScript Timer实现代码
2010/02/17 Javascript
一个js控制的导航菜单实例代码
2013/12/03 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
2016/09/14 Javascript
Angular-Touch库用法示例
2016/12/22 Javascript
jQuery.parseHTML() 函数详解
2017/01/09 Javascript
jquery实现百叶窗效果
2017/01/12 Javascript
JS非空验证及邮箱验证的实例
2017/08/11 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
vue ssr 实现方式(学习笔记)
2019/01/18 Javascript
jquery登录的异步验证操作示例
2019/05/09 jQuery
小程序实现背景音乐播放和暂停
2020/06/19 Javascript
如何利用javascript接收json信息并进行处理
2020/08/06 Javascript
[06:16]DOTA2守卫传承者——职业选手谈心路历程
2015/02/26 DOTA
朴素贝叶斯算法的python实现方法
2014/11/18 Python
Python配置mysql的教程(推荐)
2017/10/13 Python
python中subprocess批量执行linux命令
2018/04/27 Python
python读取Excel实例详解
2018/08/17 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
2019/04/16 Python
python调用摄像头拍摄数据集
2019/06/01 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
Python tkinter实现图片标注功能(完整代码)
2019/12/08 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
电子技术专业中专生的自我评价
2013/12/17 职场文书
应用外语系自荐信
2014/06/26 职场文书
2014教师研修学习体会
2014/07/08 职场文书
庆祝儿童节标语
2014/10/09 职场文书
遗嘱范文
2015/08/07 职场文书
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript