循环遍历是一个经久不衰的话题,主要是对数组、对象及字符串操作。
最初阶的是通过index下角标来进行,这是最常见最普通的并且可以获取到下角标的方式(如果有需求需要用到下角标的话)
进阶的是ES5推出的foreach,但实际性能堪忧,并且不能break return
arr.forEach(function(value,i){
console.log('forEach遍历:'+i+'--'+value);
})
同为ES5的map方法,意为映射,也可用做遍历,而且支持break与return
arr.map(function(value,i){
console.log('map遍历:'+i+'--'+value);
})
终极版是ES6的for-of
for( let i of arr){
console.log(i);
}
除了支持对象与数组的遍历外,同时支持break,continue,return,甚至还支持字符串与dome nodelist的遍历。
对比for-in,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的。因此for-in循环有缺陷,需要和object.hasOwnProperty(key)一起使用。
综上所述,如果需要数组下角标,就用带index的普通for循环,其他一律用for-of(如需支持低版本浏览器考虑babel转成es5,如果是ie9以下es5都不支持,再考虑别的插件)