第一種for循環:
?for(var? i =?0;?i < arr.length;?i++) { }
第二種方法for....in:
var arr = newArray("first", "second", "third")
?for(var item in arr) {
document.write(arr[item]+",");
}
一般都是用它來循環key是id這樣的數組,一般不推薦遍歷數組,因為for in遍歷后的不能保證順序,而且原型鏈上的屬性也會被遍歷到,因此一般常用來遍歷非數組的對象并且使用hasOwnProperty()方法去過濾掉原型鏈上的屬性..
第三種方法 forEach
arr.forEach(e => {
?e.answer = e.answer.replace(/<\/?[^>]*>/g, "");
});
瀏覽器的支持的情況,ie9以及ie9以上的瀏覽器會支持;
forEach的參數有兩個,一個是回調函數,一個是把匿名回調函數中的this進行修改,他的函數部分包括三個值1.當前元素,2.當前元素的索引值,3.當前元素所屬的數組對象。
forEach用來遍歷數組中的每一項,這個方法沒有返回值,他的返回值是undefined,對原來的數組也沒有影響。
forEach無法在所有元素都傳遞給調用的函數之前終止(而for循環卻有break方法),如果要提前終止,必須把forEach放在try塊中,并能拋出一個異常。如果forEach()調用的函數拋出foreach.break異常,循環會提前終止
forEach方法中的this是ary,匿名回調函數中的this默認是window;
forEach會改變原來的數組
var arr = newArray(1000);
arr[0] =1;
arr[99] =3;
arr[999] =5;
varcount =0;
arr.forEach(function(value, index){
?count++;console.log(typeofindex);
console.log(index, value);});
console.log('count', count);
// number
// 0 1
// number
// 99 3
// number
// 999 5
// count 3
ie6-8下的兼容性寫法
第四種map:
arr.map(function(n){});
map()方法返回的是原數組被“映射”成對應新數組,還是按原數組內的數據一次返回,
map不會對空數組進行檢驗
map不會改變原始數組
return出來的是按原來的數組的順序出來的新數組,map不會改變原來的數組
arr.map(function(currentValue , index , arr),thisValue)
map也是支持兩個參數第一個是回調函數,第二個是是把匿名回調函數中的this進行修改。
ie6-8下的兼容性的寫法
第五種for of循環
寫法:for( var value of myArray ){ console.log(value);};
(1)for of是最簡潔的,最直接的遍歷數組元素的語法
(2)這個方法避開了for in循環的所有的缺陷
(3)與forEach不同的是,它可以正確的響應break、continue和return語句
for of循環不僅能遍歷數組還可以遍歷其他的集合
for-of循環不僅支持數組,還支持大多數類數組對象,例如DOMNodeList對象。
for-of循環也支持字符串遍歷,它將字符串視為一系列的Unicode字符來進行遍歷:
for(var chr of ""){alert( chr );}
它同樣支持Map和Set對象遍歷。(下一篇會詳細的講解es6新增的類型map和set)
第五種 while
while循環15 * - 語法:16 * while(條件表達式){17 * 語句...18 * }19 * 20 * - while語句在執行時,21 * 先對條件表達式進行求值判斷,22 * 如果值為true,則執行循環體,23 * 循環體執行完畢以后,繼續對表達式進行判斷24 * 如果為true,則繼續執行循環體,以此類推25 * 如果值為false,則終止循環
第六種 do while?
- 語法:29 * do{30 * 語句...31 * }while(條件表達式)32 * 33 * - 執行流程:34 * do...while語句在執行時,會先執行循環體,35 * 循環體執行完畢以后,在對while后的條件表達式進行判斷,36 * 如果結果為true,則繼續執行循環體,執行完畢繼續判斷以此類推37 * 如果結果為false,則終止循環38 * 39 * 實際上這兩個語句功能類似,不同的是while是先判斷后執行,40 * 而do...while會先執行后判斷,41 * do...while可以保證循環體至少執行一次,42 * 而while不能
第七種 somef循環, 返回一個Boolean,判斷是否有元素符合func條件
第八種? every,返回一個Boolean,判斷每個元素是否符合func條件
第九種? ?filter() 方法創建一個新的數組,新數組中的元素是通過檢查指定數組中符合條件的所有元素。沒有到沒有符合條件時返回空數組。返回一個符合func條件的元素數組
循環控制語句
1、break:跳出本層循環,繼續執行循環后面的語句。
如果循環有多層,則break只能跳出一層。
2、continue:跳過本次循環剩余的代碼,繼續執行下一次循環。
①對與for循環,continue之后執行的語句,是循環變量更新語句i++;
②對于while、do-while循環,continue之后執行的語句,是循環條件判斷;
因此,使用這兩個循環時,必須將continue放到i++之后使用,否則,continue將跳過i++進入死循環。