数组遍历与属性
虽然在 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
遍历数组被认为是不好的代码习惯并倾向于产生错误和导致性能问题。
分享到:
相关推荐
js 二维数组 遍历 轻松实现实现 二维数组输出 包含高级for循环
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍_.docx
JavaScript应用实例-数组映射排序.js
JavaScript应用实例-图片遍历颜色.js
在JavaScript中,数组遍历是常见的操作,有多种方法可以实现,其中最常用的两种是`for`循环和`for...in`循环。然而,这两者之间存在显著的区别,理解这些差异对于编写健壮的JavaScript代码至关重要。 首先,我们来...
JavaScript应用实例-遍历文件夹.js
在Web前端开发中,"44-数组图片切换实例"是一个常见的应用场景,它涉及到JavaScript的基础知识,特别是数组操作和DOM操作。在这个实例中,我们可能会使用到数组来存储多张图片的信息,然后通过编程逻辑实现图片的...
wps-js遍历word所有字符串替换字符.docm
因此,当我们只想遍历对象或数组的自身属性时,需要使用`hasOwnProperty()`方法来过滤掉继承的属性。`hasOwnProperty()`方法可以检查一个对象是否包含特定的自身属性。 总结来说,for-in循环提供了一种便捷的方式来...
数组的其他基本操作还包括访问和遍历数组元素,通过下标可以访问到特定位置的元素,例如`arr[0]`,而遍历数组常用的方法是for循环或者forEach方法。此外,JavaScript还提供了许多内置方法来操作数组,如`push`添加...
JavaScript应用实例-遍历群成员.js
JavaScript数组遍历是处理数组数据时常用的操作,其中包括了两个非常实用的数组方法:forEach()与map()。这两个方法可以让开发者在不使用传统循环的情况下,更加方便地对数组的每一项执行操作。 首先,forEach()...
JavaScript应用实例-遍历子控件b.js
总结来说,这个“17 - 数组排序.rar”文件可能涉及了JavaScript数组排序的各个方面,包括基本用法、自定义比较函数、对象属性排序、稳定性和性能考虑等知识点。通过深入学习和实践这些内容,开发者可以更好地理解和...
主要介绍了Vue指令v-for遍历输出JavaScript数组及json对象的常见方式,结合实例形式总结分析了vue.js使用v-for指令遍历输出js数组与json对象的常见操作技巧,需要的朋友可以参考下
JavaScript应用实例-遍历查找指定类型的子控件.js
数组遍历是前端开发中常见的操作,可以使用`for`循环实现。在遍历过程中,通常从0开始递增索引,直到达到数组长度。数组的长度可以通过`.length`属性获取,如`arr.length`。这样可以避免手动计算数组元素的数量。 ...
在JavaScript中,数组遍历是开发过程中非常常见且重要的操作,`forEach`方法就是其中一种常用的数组迭代方式。本文将详细讲解`forEach`方法的工作原理、语法、使用场景以及一些实用技巧。 `forEach`方法是...
同时,一维数组与二维数组的区别在实验中被明确指出,有助于初学者快速区分和掌握不同类型的数组操作。 实验三主要关注数组的复制和元素的操作。在Java中,数组的复制是一个重要的概念,因为这涉及到对数组元素的...
在JavaScript编程中,有几个关键概念和技术点在标题和描述中被提及:浏览器判断、绑定事件、`arguments`对象转换为数组以及数组遍历。这些是JavaScript开发中的基础但至关重要的部分,下面将逐一进行详细解释。 1. ...