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实现页面自适应
Jan 19 Javascript
JS调试必备的5个debug技巧
Mar 07 Javascript
15个jquery常用方法、小技巧分享
Jan 13 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
Aug 10 Javascript
javascript字符串替换函数如何一次性全部替换掉
Oct 30 Javascript
jQuery的deferred对象使用详解
Sep 25 Javascript
jQuery延迟执行的实现方法
Dec 21 Javascript
JS实现下拉菜单列表与登录注册弹窗效果
Aug 10 Javascript
基于vue1和vue2获取dom元素的方法
Mar 17 Javascript
js中怎么判断两个字符串相等的实例
Jan 17 Javascript
js对象数组和对象的使用实例详解
Aug 27 Javascript
vue 组件内获取actions的response方式
Nov 08 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
thinkphp实现图片上传功能分享
2014/03/04 PHP
php管理nginx虚拟主机shell脚本实例
2014/11/19 PHP
php绘图之加载外部图片的方法
2015/01/24 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
2019/09/16 PHP
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
jQuery 1.5.1 发布,全面支持IE9 修复大量bug
2011/02/26 Javascript
基于jQuery实现仿淘宝套餐选择插件
2015/03/04 Javascript
用JavaScript实现页面重定向功能的教程
2015/06/04 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
Node.js中npm常用命令大全
2016/06/09 Javascript
第六篇Bootstrap表格样式介绍
2016/06/21 Javascript
详解Angular的数据显示优化处理
2016/12/26 Javascript
前端把html表格生成为excel表格的实例
2017/09/19 Javascript
简单实现jquery隔行变色
2017/11/09 jQuery
Vue中props的详解
2019/05/16 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
解决vant-UI库修改样式无效的问题
2020/11/03 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
Python求解任意闭区间的所有素数
2018/06/10 Python
终端命令查看TensorFlow版本号及路径的方法
2018/06/13 Python
python读取Excel实例详解
2018/08/17 Python
Python3.5模块的定义、导入、优化操作图文详解
2019/04/27 Python
Django 请求Request的具体使用方法
2019/11/11 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
2020/02/23 Python
python要安装在哪个盘
2020/06/15 Python
button在IE6/7下的黑边去除方案
2012/12/24 HTML / CSS
CSS的background属性及CSS3的背景图片设置总结
2016/06/13 HTML / CSS
活动倡议书范文
2014/05/13 职场文书
财务会计实训报告
2014/11/05 职场文书
学籍证明模板
2014/11/21 职场文书
讲座开场白台词和结束语
2015/05/29 职场文书
Go各时间字符串使用解析
2021/04/02 Golang
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python