Javascript学习笔记之数组的遍历和 length 属性


Posted in Javascript onNovember 23, 2014

尽管数组在 Javascript 中是对象,但是不建议使用 for in 循环来遍历数组,实际上,有很多理由来阻止我们对数组使用 for in 循环。
因为 for in 循环将会枚举原型链上的所有属性,并且唯一阻止的方法是使用 hasOwnProperty 来判断,这将比普通的 for 循环要慢不少。

遍历

为了达到最佳性能来遍历一个数组,最好的方式就是使用经典的 for 循环。

var list = [1, 2, 3, 4, 5, ...... 100000000];

for(var i = 0, l = list.length; i < l; i++) {

    console.log(list[i]);

}

这儿有一个额外的技巧,就是通过 l = list.length 来缓存数组的长度。
尽管属性 length 是定义在数组本身的,但是在循环的每一次遍历时仍然会有开销。尽管最新的 Javascript 引擎可能已经对这种情况作了性能上的优化,但是你并不能保证你的 Javascript 代码会一直在这种浏览器上运行。
实际上,不缓存长度的循环要比缓存长度的循环性能上慢不少。

length 属性

尽管 length 属性仅仅通过 getter 方法返回数组中元素的个数,但是可以通过 setter 方法来截断数组。

var foo = [1, 2, 3, 4, 5, 6];

foo.length = 3;

foo; // [1, 2, 3]

foo.length = 6;

foo.push(4);

foo; // [1, 2, 3, undefined, undefined, undefined, 4]

给 length 属性赋值一个更小的数将会截断数组,如果赋值一个更大的数则不会截断数组。

总结

为了性能达到最优,建议使用 for 循环而不是使用 for in 循环,同时缓存 length 属性。

还有数组对象是没有任何方法的,只有一个唯一的属性length。字符串对象是有length方法的~~

Javascript 相关文章推荐
js 获取后台的字段 改变 checkbox的被选中的状态 代码
Jun 05 Javascript
js 去除字符串第一位逗号的方法
Jun 07 Javascript
Javascript非构造函数的继承
Apr 27 Javascript
jQuery根据元素值删除数组元素的方法
Jun 24 Javascript
JS组件中bootstrap multiselect两大组件较量
Jan 26 Javascript
jQuery-mobile事件监听与用法详解
Nov 23 Javascript
全面解析jQuery中的$(window)与$(document)的用法区别
Aug 15 jQuery
Javacript中自定义的map.js  的方法
Nov 26 Javascript
ES6与CommonJS中的模块处理的区别
Jun 13 Javascript
详解webpack打包后如何调试的方法步骤
Nov 07 Javascript
小程序如何使用分包加载的实现方法
May 22 Javascript
解决vue动态下拉菜单 有数据未反应的问题
Aug 06 Javascript
Javascript 赋值机制详解
Nov 23 #Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
Nov 23 #Javascript
Javascript学习笔记之函数篇(五) : 构造函数
Nov 23 #Javascript
Javascript学习笔记之函数篇(四):arguments 对象
Nov 23 #Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
Nov 23 #Javascript
js实例属性和原型属性示例详解
Nov 23 #Javascript
JS常用函数使用指南
Nov 23 #Javascript
You might like
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
php5中类的学习
2008/03/28 PHP
浅析echo(),print(),print_r(),return之间的区别
2013/11/27 PHP
laravel框架数据库配置及操作数据库示例
2019/10/10 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
2020/01/26 PHP
javawscript 三级菜单的实现原理
2009/07/01 Javascript
对字符串进行HTML编码和解码的JavaScript函数
2010/02/01 Javascript
JSQL SQLProxy 的 php 版本代码
2010/05/05 Javascript
JQuery中DOM事件绑定用法详解
2015/06/13 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
JS实现线性表的顺序表示方法示例【经典数据结构】
2017/04/11 Javascript
详解angularjs利用ui-route异步加载组件
2017/05/21 Javascript
JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能
2017/06/20 Javascript
JavaScript实现简单生成随机颜色的方法
2017/09/21 Javascript
Webpack之tree-starking 解析
2018/09/11 Javascript
jquery操作checkbox的常用方法总结【附测试源码下载】
2019/06/10 jQuery
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
15分钟上手vue3.0(小结)
2020/05/20 Javascript
[53:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第三场 6.2
2018/06/03 DOTA
用python代码做configure文件
2014/07/20 Python
详解python调度框架APScheduler使用
2017/03/28 Python
django自带的server 让外网主机访问方法
2018/05/14 Python
pandas 实现字典转换成DataFrame的方法
2018/07/04 Python
Python get获取页面cookie代码实例
2018/09/12 Python
Python全栈之列表数据类型详解
2019/10/01 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
2020/06/23 Python
Python fileinput模块如何逐行读取多个文件
2020/10/05 Python
利用python查看数组中的所有元素是否相同
2021/01/08 Python
Grow Gorgeous美国官网:只要八天,体验唤醒毛囊后新生的茂密秀发
2018/06/04 全球购物
高中考试作弊检讨书
2014/01/14 职场文书
机械工程师岗位职责
2014/06/16 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
趣味运动会广播稿
2015/08/19 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书
python脚本框架webpy模板赋值实现
2021/11/20 Python