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 相关文章推荐
类似框架的js代码
Nov 09 Javascript
目前流行的JavaScript库的介绍及对比
Sep 29 Javascript
使用AngularJS对表单提交内容进行验证的操作方法
Jul 12 Javascript
微信小程序 rich-text的使用方法
Aug 04 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
Sep 13 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
Sep 13 Javascript
深入理解js 中async 函数的含义和用法
May 13 Javascript
微信小程序实现上传图片裁剪图片过程解析
Aug 22 Javascript
npm 语义版本控制详解
Sep 10 Javascript
JS实现容器模块左右拖动效果
Jan 14 Javascript
微信小程序实现带放大效果的轮播图
May 26 Javascript
微信小程序实现发微博功能的示例代码
Jun 24 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
详解Yii2 定制表单输入字段的标签和样式
2017/01/04 PHP
总结PHP内存释放以及垃圾回收
2018/03/29 PHP
JS 自动完成 AutoComplete(Ajax 查询)
2009/07/07 Javascript
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
jquery清空表单数据示例分享
2014/02/13 Javascript
浅谈Javascript如何实现匀速运动
2014/12/19 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
Nodejs学习item【入门手上】
2016/05/05 NodeJs
Javascript之面向对象--接口
2016/12/02 Javascript
Angular的模块化(代码分享)
2016/12/26 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
vue移动端微信授权登录插件封装的实例
2018/08/28 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
原生js+css调节音量滑块
2020/01/15 Javascript
解决vue项目运行提示Warnings while compiling.警告的问题
2020/09/18 Javascript
npm ci命令的基本使用方法
2020/09/20 Javascript
python 多线程应用介绍
2012/12/19 Python
python实现的简单文本类游戏实例
2015/04/28 Python
基于pandas数据样本行列选取的方法
2018/04/20 Python
Django 使用Ajax进行前后台交互的示例讲解
2018/05/28 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
2020/02/12 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
用Python实现职工信息管理系统
2020/12/30 Python
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
印尼披萨外送专家:Domino’s Pizza印尼
2017/12/28 全球购物
如何启动时不需输入用户名与密码
2014/05/09 面试题
房地产出纳岗位职责
2013/12/01 职场文书
双十佳事迹材料
2014/01/29 职场文书
公司员工检讨书
2014/02/08 职场文书
入股协议书范本
2014/04/14 职场文书
成品仓库管理员岗位职责
2015/04/09 职场文书
学校证明范文
2015/06/24 职场文书
nginx安装以及配置的详细过程记录
2021/09/15 Servers
8个JS的reduce使用实例和reduce操作方式
2021/10/05 Javascript
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android