1、普通for循环
语法:for(j = 0,len=arr.length; j < len; j++) {....}
说明:
1、使用临时变量,将长度缓存起来,避免重复获取数组长度,当数组较大时优化效果才会比较明显。
2、这种方法基本上是所有循环遍历方法中性能最高的一种
2、forEach()
语法:arr.forEach(function(value,index,array){...}
说明:
1、没有返回值
2、参数:value数组中的当前项, index当前项的索引, array原始数组
3、理论上这个方法是没有返回值的,仅仅是遍历数组中的每一项,不对原来数组进行修改;但是可以自己通过数组的索引来修改原来的数组;
3、map()
语法:arr[].map(function(value,index,array){...}
说明:
1、有返回值,返回的是一个新数组,里面的每一项是匿名函数内return 出来的值
2、参数:value数组中的当前项,index当前项的索引,array原始数组;
3、区别:map的回调函数中支持return返回值;return的是啥,相当于把数组中的这一项变为啥
(并不影响原来的数组,只是相当于把原数组克隆一份,把克隆的这一份的数组中的对应项改变了);
4、for...in循环
语法:for(var key in obj){...}
说明:
1、无序循环,用于遍历数组效率最低,常用来遍历对象
(数组索引只是具有整数名称的枚举属性,并且与通用对象属性相同。不能保证for ... in将以任何特定的顺序返回索引)
2、只遍历自身和继承的可枚举属性
5、for...of循环(ES6)
语法:for(let value of iterator){...}
说明:
1、用于循环迭代遍历器(Iterator),数组原生具有Iterator接口,所以也可以用for...of遍历
2、有序遍历
3、Set、Map、Generator也可以用此遍历
4、普通的对象能直接使用for...of遍历,可以使用Object.keys()将对象的可枚举属性取出合成一个数组,然后遍历这个键值数组
for(let key of Object.keys(obj)){
let value = obj[key]
}
5、可以一break、continue、return配合使用