数组遍历与属性
虽然在 JavaScript 中数组是是对象,但是没有好的理由去使用 for in
循环 遍历数组。
相反,有一些好的理由不去使用 for in
遍历数组。
注意: JavaScript 中数组不是 关联数组。
JavaScript 中只有对象 来管理键值的对应关系。但是关联数组是保持顺序的,而对象不是。
由于 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 引擎在这点上做了优化,但是我们没法保证自己的代码是否运行在这些最近的引擎之上。
实际上,不使用缓存数组长度的方式比缓存版本要慢很多。
length
属性
length
属性的 getter 方式会简单的返回数组的长度,而 setter 方式会截断数组。
var foo = [1, 2, 3, 4, 5, 6];
foo.length = 3;
foo; // [1, 2, 3]
foo.length = 6;
foo; // [1, 2, 3]
译者注:
在 Firebug 中查看此时 foo
的值是: [1, 2, 3, undefined, undefined, undefined]
但是这个结果并不准确,如果你在 Chrome 的控制台查看 foo
的结果,你会发现是这样的: [1, 2, 3]
因为在 JavaScript 中 undefined
是一个变量,注意是变量不是关键字,因此上面两个结果的意义是完全不相同的。
// 译者注:为了验证,我们来执行下面代码,看序号 5 是否存在于 foo 中。
5 in foo; // 不管在 Firebug 或者 Chrome 都返回 false
foo[5] = undefined;
5 in foo; // 不管在 Firebug 或者 Chrome 都返回 true
为 length
设置一个更小的值会截断数组,但是增大 length
属性值不会对数组产生影响。
结论
为了更好的性能,推荐使用普通的 for
循环并缓存数组的 length
属性。
使用 for in
遍历数组被认为是不好的代码习惯并倾向于产生错误和导致性能问题。
分享到:
相关推荐
Javascript中二维数组的遍历,上次碰到的时候有点迷惑,找了很多资料,最后整理的精华
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍_.docx
JavaScript 1.8.5 英文第四章 数组与函数数组遍历
JavaScript应用实例-数组映射排序.js
JavaScript应用实例-图片遍历颜色.js
JavaScript应用实例-数组填充.js
JavaScript应用实例-数组填充(1).js
主要介绍了javascript数组遍历for与for in区别,是篇非常不错的文章,这里推荐给小伙伴们。
JavaScript应用实例-遍历文件夹.js
js 实现 JavaScript遍历数组! 值得下载看看!资源免费,大家分享!!
JavaScript_数组方法-删除、插入、替换.源码
JAVA实验报告-数组.docx
主要介绍了JavaScript遍历查找数组中最大值与最小值的方法,结合实例形式分析了javascript基于数组遍历、判断实现最大值与最小值计算的相关操作技巧,需要的朋友可以参考下
JavaScript应用实例-遍历群成员.js
由于JavaScript 是一种无类型语言,所以,数组元素可以是任意的数据类型,同一数组的不同元素也可以具有不同的类型。数组的元素甚至可以是其他数组,这样就为创建多维数组提供了可能。本章首先介绍数组的定义与赋值...
JavaScript应用实例-遍历子控件b.js
下面小编就为大家带来一篇JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
本篇文章主要介绍了Javascript 数组循环遍历之forEach详解,对学习forEach有很好的帮助,有需要的可以了解一下。
主要介绍了Vue指令v-for遍历输出JavaScript数组及json对象的常见方式,结合实例形式总结分析了vue.js使用v-for指令遍历输出js数组与json对象的常见操作技巧,需要的朋友可以参考下