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技巧--转义符&quot;\&quot;的妙用
Jan 09 Javascript
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
Dec 02 Javascript
JavaScript 字符串连接性能优化
Dec 20 Javascript
JQuery 风格的HTML文本转义
Jul 01 Javascript
Javascript 调试利器 Firebug使用详解六
Jul 05 Javascript
javascript 三种编解码方式
Feb 01 Javascript
javascript实现yield的方法
Nov 06 Javascript
jQuery拖拽 &amp; 弹出层 介绍与示例
Dec 27 Javascript
解析预加载显示图片艺术
Dec 05 Javascript
JavaScript组件开发之输入框加候选框
Mar 10 Javascript
详解Vue整合axios的实例代码
Jun 21 Javascript
原生JS无缝滑动轮播图
Oct 22 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
星际初学者游戏中永远要做的事
2020/03/04 星际争霸
php数组的一些常见操作汇总
2011/07/17 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
PHP使用OB缓存实现静态化功能示例
2019/03/23 PHP
jquery 应用代码 方便的排序功能
2010/02/06 Javascript
Js 时间间隔计算的函数(间隔天数)
2011/11/15 Javascript
jquery解析JSON数据示例代码
2014/03/17 Javascript
JavaScript中获取样式的原生方法小结
2014/10/08 Javascript
jQuery ajax serialize() 方法使用示例
2014/11/02 Javascript
JavaScript使用setInterval()函数实现简单轮询操作的方法
2015/02/02 Javascript
原生JS实现拖拽图片效果
2020/08/27 Javascript
解读Bootstrap v4 sass设计
2016/05/29 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
2016/06/01 Javascript
layui下拉框获取下拉值(select)的例子
2019/09/10 Javascript
vue中使用GraphQL的实例代码
2019/11/04 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
[48:39]Ti4主赛事胜者组第一天 EG vs NEWBEE 2
2014/07/19 DOTA
[00:32]2018DOTA2亚洲邀请赛OpTic出场
2018/04/03 DOTA
Python中使用装饰器和元编程实现结构体类实例
2015/01/28 Python
python定时执行指定函数的方法
2015/05/27 Python
Python字符串转换成浮点数函数分享
2015/07/24 Python
基于python实现微信好友数据分析(简单)
2020/02/16 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
2020/10/10 Python
CSS3美化表单控件全集
2016/06/29 HTML / CSS
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
师范大学音乐表演专业求职信
2013/10/23 职场文书
医学毕业生自我鉴定
2013/10/30 职场文书
医生进修自我鉴定
2014/01/19 职场文书
怎样写好自我评价呢?
2014/02/16 职场文书
中医学专业自荐信范文
2014/04/01 职场文书
三分钟演讲稿范文
2014/04/24 职场文书
优秀教师感人事迹材料
2014/05/04 职场文书
2016自主招生校长推荐信范文
2015/03/23 职场文书
如何写好竞聘报告
2019/04/03 职场文书
python字典的元素访问实例详解
2021/07/21 Python