for 性能最佳。break、continue、return语句都能正确响应,用来遍历数组。
var i; var arr = [1,2,3,4,5] var l = arr.length; for(i = 0;i < l; i++){ if(arr[i] == 2){ continue; //跳出当前循环 输出:1 3 4 5 break; //跳出整个循环 输出:1 } console.log(arr[i]) }
forEach (ES5新增)性能一般。break会报错,return fasle终止整个循环,终止某次循环用try catch抛出异常 。用来遍历数组。
var arr = [1,2,3,4,5] arr.forEach(function(item,index){ try{ if(item === 2){ throw new Error('error') // 抛出异常 } }catch(error) { console.error('error occurred',error.message) //捕获异常,处理异常 } });
for in 为了遍历对象而设计的。break、continue、return语句都能正确响应。数组和对象都可以遍历。
var arr = [1,2,3,4,5] for (var i in arr) { console.log(i + ":" + arr[i]) } } //for-in会遍历到数组的属性 arr.logo = "xiaoxiao" for ( var i in arr){ console.log(i+ ":" +arr[i]) }
for of (ES6新增) 用于遍历可迭代对象( Array, Map, Set, String, TypedArray,arguments )不能使用break语句,return语句能正确响应。
for ( let i of arr){ console.log(i) //输出每个元素 } // for-of遍历Map对象 let iterable = new Map([[ "a" , 1], [ "b" , 2], [ "c" , 3]]); for ( let [key, value] of iterable) { console.log(value); } //输出 1 2 3 // for-of遍历字符串 let iterable = "china中国" ; for ( let value of iterable) { console.log(value); } //输出 "c" "h" "i" "n" "a" "中" "国"
总结
-
用 for 循环遍历数组
-
用 for-in 遍历对象
-
用 for-of 遍历类数组对象(ES6)
-
用 Object.keys()获取对象属性名的集合