数组遍历与属性
虽然在 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数组遍历方法,并通过实例来加深理解。 1. `for`循环 这...
JavaScript应用实例-数组映射排序.js
JavaScript应用实例-图片遍历颜色.js
JavaScript应用实例-数组填充.js
JavaScript应用实例-遍历文件夹.js
JavaScript_数组方法-删除、插入、替换.源码
在Web前端开发中,"44-数组图片切换实例"是一个常见的应用场景,它涉及到JavaScript的基础知识,特别是数组操作和DOM操作。在这个实例中,我们可能会使用到数组来存储多张图片的信息,然后通过编程逻辑实现图片的...
在JavaScript中,数组遍历是常见的操作,有多种方法可供选择。本文主要分析了JS中常用的7种数组遍历方式,并进行了性能对比。以下是这些遍历方式的详细说明: 1. **普通for循环**: ```javascript for (j = 0; j ...
本文将详细介绍JavaScript中数组遍历的方法,并结合实例分析一些常用的数组遍历函数的使用技巧。 首先,我们需要了解什么是数组遍历。数组遍历是指按照一定的顺序,逐一访问数组中的每一个元素,执行特定操作的过程...
然而,除了for循环外,现代JavaScript提供了更为简洁和高级的数组遍历方法:`forEach`。`forEach`方法为每个数组元素执行一次提供的函数,不返回任何值。 #### 2. forEach函数使用 `forEach` 方法是Firefox和...
最终,Vue会根据这个模板生成一个表格,每行对应一个二维数组中的子数组,每列则对应子数组内对象的一个非`type`属性。 总结来说,Vue中的`v-for`指令对于遍历二维数组非常有用,特别是当需要在模板中动态渲染复杂...
wps-js遍历word所有字符串替换字符.docm
因此,当我们只想遍历对象或数组的自身属性时,需要使用`hasOwnProperty()`方法来过滤掉继承的属性。`hasOwnProperty()`方法可以检查一个对象是否包含特定的自身属性。 总结来说,for-in循环提供了一种便捷的方式来...
数组的其他基本操作还包括访问和遍历数组元素,通过下标可以访问到特定位置的元素,例如`arr[0]`,而遍历数组常用的方法是for循环或者forEach方法。此外,JavaScript还提供了许多内置方法来操作数组,如`push`添加...
JavaScript应用实例-遍历群成员.js
JavaScript数组遍历是处理数组数据时常用的操作,其中包括了两个非常实用的数组方法:forEach()与map()。这两个方法可以让开发者在不使用传统循环的情况下,更加方便地对数组的每一项执行操作。 首先,forEach()...
由于JavaScript 是一种无类型语言,所以,数组元素可以是任意的数据类型,同一数组的不同元素也可以具有不同的类型。数组的元素甚至可以是其他数组,这样就为创建多维数组提供了可能。本章首先介绍数组的定义与赋值...