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 相关文章推荐
setTimeout和setInterval的浏览器兼容性分析
Feb 27 Javascript
基于jquery用于查询操作的实现代码
May 10 Javascript
jQuery插件jQuery-JSONP开发ajax调用使用注意事项
Nov 22 Javascript
JavaScript动态操作表格实例(添加,删除行,列及单元格)
Nov 25 Javascript
解决JS请求服务器gbk文件乱码的问题
Oct 16 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
Nov 07 Javascript
学习vue.js计算属性
Dec 03 Javascript
详细介绍RxJS在Angular中的应用
Sep 23 Javascript
vue单页应用的内存泄露定位和修复问题小结
Aug 02 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
Nov 07 Javascript
jQuery实现评论模块
Aug 19 jQuery
解决vux 中popup 组件Mask 遮罩在最上层的问题
Nov 03 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
PHP实现的简单组词算法示例
2018/04/10 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
xml 封装与解析(javascript和C#中)
2009/07/26 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
2016/03/25 Javascript
详解AngularJS 模态对话框
2016/04/07 Javascript
极力推荐一款小巧玲珑的可视化编辑器bootstrap-wysiwyg
2016/05/27 Javascript
用js写的一个路由(简单实例)
2016/09/24 Javascript
JavaScript &amp; jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
React快速入门教程
2017/01/17 Javascript
Vue.js开发环境快速搭建教程
2017/03/17 Javascript
javascript 正则表达式分组、断言详解
2017/04/20 Javascript
详解在Vue中如何使用axios跨域访问数据
2017/07/07 Javascript
swiper在angularjs中使用循环轮播失效的解决方法
2018/09/27 Javascript
详解原生JS动态添加和删除类
2019/03/26 Javascript
layui table去掉右侧滑动条的实现方法
2019/09/05 Javascript
详解Python异常处理中的Finally else的功能
2017/12/29 Python
python生成器,可迭代对象,迭代器区别和联系
2018/02/04 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
Python Json数据文件操作原理解析
2020/05/09 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
实例教程 利用html5和css3打造一款创意404页面
2014/10/20 HTML / CSS
使用html5新特性轻松监听任何App自带返回键的示例
2018/03/13 HTML / CSS
h5页面背景图很长要有滚动条滑动效果的实现
2021/01/27 HTML / CSS
美国在线精品家居网站:Burke Decor
2017/04/12 全球购物
香港网上花店:FlowerAdvisor香港
2019/05/30 全球购物
幼师自我鉴定范文
2013/10/01 职场文书
化学教师教学反思
2014/01/17 职场文书
《和我们一样享受春天》教学反思
2014/02/07 职场文书
迟到检讨书300字
2014/02/14 职场文书
总经理司机岗位职责
2015/04/10 职场文书
2015年校务公开工作总结
2015/05/26 职场文书
售房协议书范本
2015/08/11 职场文书
Prometheus 监控MySQL使用grafana展示
2021/08/30 MySQL
java中用float时,数字后面加f,这样是为什么你知道吗
2021/09/04 Java/Android