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运动框架_包括图片的淡入淡出效果
May 11 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
May 22 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
Nov 26 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
Feb 28 Javascript
Angular 理解module和injector,即依赖注入
Sep 07 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
Nov 09 Javascript
Mongoose经常返回e11000 error的原因分析
Mar 29 Javascript
微信小程序 页面跳转传值实现代码
Jul 27 Javascript
vue iview组件表格 render函数的使用方法详解
Mar 15 Javascript
利用jqgrid实现上移下移单元格功能
Nov 07 Javascript
小程序实现悬浮搜索框
Jul 12 Javascript
解决新建一个vue项目过程中遇到的问题
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
解析PHP强制转换类型及远程管理插件的安全隐患
2014/06/30 PHP
PHP迭代器接口Iterator用法分析
2017/12/28 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
Extjs Ext.MessageBox.confirm 确认对话框详解
2010/04/02 Javascript
需要做特殊处理的DOM元素属性的访问
2010/11/05 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
js禁止页面使用右键(简单示例代码)
2013/11/13 Javascript
js调试系列 初识控制台
2014/06/18 Javascript
js调试系列 源码定位与调试[基础篇]
2014/06/18 Javascript
判断在css加载完毕后执行后续代码示例
2014/09/03 Javascript
JavaScript中扩展Array contains方法实例
2020/08/23 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
2016/04/14 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
解析js如何获取css样式
2016/12/11 Javascript
jQuery validate插件功能与用法详解
2016/12/15 Javascript
angular.js4使用 RxJS 处理多个 Http 请求
2017/09/23 Javascript
浅谈MUI框架中加载外部网页或服务器数据的方法
2018/01/31 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
微信小程序实现通过js操作wxml的wxss属性示例
2018/12/06 Javascript
小程序扫描普通链接二维码跳转小程序指定界面方法
2019/05/07 Javascript
Vue编程式跳转的实例代码详解
2019/07/10 Javascript
[50:21]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/19 DOTA
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
运行django项目指定IP和端口的方法
2018/05/14 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
jupyternotebook 撤销删除的操作方式
2020/04/17 Python
利用CSS3实现自定义滚动条代码分享
2016/08/18 HTML / CSS
西雅图电动自行车公司:Rad Power Bikes
2020/02/02 全球购物
毕业生实习鉴定
2013/12/11 职场文书
学校元旦晚会方案
2014/02/19 职场文书
锦旗标语大全
2014/06/23 职场文书
员工保密协议书
2014/09/27 职场文书
红色革命电影观后感
2015/06/18 职场文书
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server
在容器中使用nginx搭建上传下载服务器
2022/05/11 Servers
MySQL安装失败的原因及解决步骤
2022/06/14 MySQL