js的遍历方式真的是有很多,有用于遍历数组的,也有用于遍历对象的……各种方式有什么样的应用场景?如何选择恰当的遍历方式?很容易就让人迷糊,所以做一下总结吧。
第一种:普通for循环
// 直接遍历出的是索引,注意每次遍历都需要获取一次arr的长度。
for (j = 0; j < arr.length; j++) {
}
简要说明: 最简单的一种,也是使用频率最高的一种,虽然性能不弱,但仍有优化空间。
有索引就能方便地获取值。
支持continue和break。
第二种:优化版for循环
for (j = 0, len=arr.length; j < len; j++) {
}
简要说明: 使用临时变量,将长度缓存起来,避免重复获取数组长度,当数组较大时优化效果才会比较明显。
这种方法基本上是所有循环遍历方法中性能最高的一种。
第三种:forEach循环
arr.forEach(function(item, index){
});
简要说明: 数组自带的forEach循环,使用频率较高,实际上性能比普通for循环弱
可以直接获取索引和值。但是forEach不支持break和continue。可以支持return,js中return和continue的功能类似,可以退出当前方法,即相当于跳过本次循环???
第四种:forEach变种
Array.prototype.forEach.call(arr, function(item, index){
});
简要说明: 由于foreach是Array型自带的,对于一些非这种类型的,无法直接使用(如NodeList),所以才有了这个变种,使用这个变种可以让类似的数组拥有foreach功能。
实际性能要比普通foreach弱。
第五种:for…in循环
其实for…in循环是为了遍历对象的属性而设计的:
for ( 键名 in 被遍历的对象 ) {
// 需要执行的代码
}
获取键名之后如何获取属性值呢?通过目标对象[键名],而不能使用点号.键名,否则会显示