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 相关文章推荐
初学prototype,发个JS接受URL参数的代码
Sep 25 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
Aug 01 Javascript
一个js控制的导航菜单实例代码
Dec 03 Javascript
js判断iframe内的网页是否滚动到底部触发事件
Mar 18 Javascript
JavaScript实现定时隐藏与显示图片的方法
Aug 06 Javascript
JavaScript多线程详解
Aug 12 Javascript
jquery实现轮播图效果
Feb 13 Javascript
js设计模式之单例模式原理与用法详解
Aug 15 Javascript
layuiAdmin循环遍历展示商品图片列表的方法
Sep 16 Javascript
微信小程序手动添加收货地址省市区联动
May 18 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
May 19 Javascript
Vue中Object.assign清空数据报错的解决方案
Mar 03 Vue.js
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 调试利器debug_print_backtrace()
2012/07/23 PHP
PHP面向对象精要总结
2014/11/07 PHP
PHP整合七牛实现上传文件
2015/07/03 PHP
php里array_work用法实例分析
2015/07/13 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
基于NodeJS的前后端分离的思考与实践(二)模版探索
2014/09/26 NodeJs
JS实现网页每隔3秒弹出一次对话框的方法
2015/11/09 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
2016/01/04 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
深入剖析javascript中的exec与match方法
2016/05/18 Javascript
深入浅析search 搜索框的写法
2016/08/02 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
2016/10/13 Javascript
8 行 Node.js 代码实现代理服务器
2016/12/05 Javascript
JavaScript实现弹出广告功能
2017/03/30 Javascript
快速使用node.js进行web开发详解
2017/04/26 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
Node.js EventEmmitter事件监听器用法实例分析
2019/01/07 Javascript
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
[01:32]DOTA2 2015国际邀请赛中国区预选赛第四日战报
2015/05/29 DOTA
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
2016/06/13 Python
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
基于python 爬虫爬到含空格的url的处理方法
2018/05/11 Python
Python求解正态分布置信区间教程
2019/11/20 Python
15行Python代码实现免费发送手机短信推送消息功能
2020/02/27 Python
Python生成器常见问题及解决方案
2020/03/21 Python
浅谈tensorflow 中的图片读取和裁剪方式
2020/06/30 Python
CSS3新增布局之: flex详解
2020/06/18 HTML / CSS
全球最大化妆品零售网站:SkinStore
2020/10/24 全球购物
校园奶茶店创业计划书
2014/01/23 职场文书
旷课检讨书1000字
2014/02/14 职场文书
宿舍违规用电检讨书
2014/02/16 职场文书
海飞丝的广告词
2014/03/20 职场文书
毕业生学校推荐信范文
2014/05/21 职场文书
Dashboard管理Kubernetes集群与API访问配置
2022/04/01 Servers
一级电子管军用接收机测评
2022/04/05 无线电