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 相关文章推荐
JQuery实现简单验证码提示解决方案
Dec 20 Javascript
javascript当中的代码嗅探扩展原生对象和原型(prototype)
Jan 11 Javascript
jQuery的animate函数学习记录
Aug 08 Javascript
JavaScript中连接操作Oracle数据库实例
Apr 02 Javascript
js实现touch移动触屏滑动事件
Apr 17 Javascript
提高JavaScript执行效率的23个实用技巧
Mar 01 Javascript
jquery获取select,option所有的value和text的实例
Mar 06 Javascript
javascript标准库(js的标准内置对象)总结
May 26 Javascript
详解Angular6.0使用路由步骤(共7步)
Jun 29 Javascript
Vue+axios实现统一接口管理的方法
Jul 23 Javascript
js实现动态添加上传文件页面
Oct 22 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
Jun 26 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
phpstorm配置Xdebug进行调试PHP教程
2014/12/01 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
php采集神器cURL使用方法详解
2016/02/19 PHP
Thinkphp实现短信验证注册功能
2016/10/18 PHP
php 多文件上传的实现实例
2016/10/23 PHP
php调用云片网接口发送短信的实现方法
2017/10/25 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
Javascript里使用Dom操作Xml
2007/01/22 Javascript
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
2011/06/08 Javascript
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
浅析document.ready和window.onload的区别讲解
2013/12/18 Javascript
jQuery Dialog对话框事件用法实例分析
2016/05/10 Javascript
jQuery过滤选择器经典应用
2016/08/18 Javascript
JS实现超简单的汉字转拼音功能示例
2016/12/22 Javascript
JavaScript制作简单的框选图表
2017/05/15 Javascript
ES6中箭头函数的定义与调用方式详解
2017/06/02 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
Vue函数式组件的应用实例详解
2019/08/30 Javascript
vue学习笔记之slot插槽用法实例分析
2020/02/29 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
js实现验证码干扰(动态)
2021/02/23 Javascript
深入理解python try异常处理机制
2016/06/01 Python
Python的Flask框架中的Jinja2模板引擎学习教程
2016/06/30 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
python并发编程多进程 模拟抢票实现过程
2019/08/20 Python
python 监控logcat关键字功能
2020/09/04 Python
Django Form常用功能及代码示例
2020/10/13 Python
英国办公用品商店:Office Outlet
2018/04/04 全球购物
税务专业毕业生自荐信
2013/11/10 职场文书
《忆江南》教学反思
2014/04/07 职场文书
离婚协议书范本及离婚须知
2014/10/15 职场文书
财务会计求职信范文
2015/03/20 职场文书
学校证明范文
2015/06/24 职场文书
2015年医院保卫科工作总结
2015/07/23 职场文书