JS中for循環(huán)的四種寫法示例(入門級)
1. 傳統(tǒng)for循環(huán)
for (init; cond; inc) { // body }
與C++或Java類似,for關(guān)鍵字后用小括號描述循環(huán)設置,在小括號中用兩個分號;將循環(huán)設置隔斷為三個部分,分別為:
- init初始化語句(指令),在整個循環(huán)開始前執(zhí)行
- cond條件(邏輯表達式),表示循環(huán)繼續(xù)的條件
- inc自增語句(指令),在每次循環(huán)體結(jié)束以后執(zhí)行
整個循環(huán)的執(zhí)行步驟為:
- 執(zhí)行init語句
- 計算cond表達式,若為假則退出循環(huán)
- 執(zhí)行循環(huán)體body
- 執(zhí)行inc語句,隨后返回步驟2
例如:
let sum = 0 for (let i = 1; i <= 10; i++) { sum += i } console.log(sum) // 55
2. for of 循環(huán)
for (const v of iterable) { // body }
這里的iterable是指各種能夠被迭代的JS對象。最常用的例子是數(shù)組Array和字符串String,此外還有arguments、NodeList、Map、Set等等。執(zhí)行的效果是,for循環(huán)會遍歷iterable的每個項目,在每次循環(huán)中,代表變量v即為當前循環(huán)的項目。
例如:
const arr = [1, 2, 3, 4, 5] let sum = 0 for (const v of arr) { sum += v } console.log(sum) // 15
高級:for await (const v of iterable) 可以用于異步循環(huán)遍歷。
3. for in 循環(huán)
for (const k in object) { // body }
for in循環(huán)會遍歷object的每個屬性,在每次循環(huán)中,代表變量k即為當前屬性的屬性名稱(key)。
例如:
const obj = { a: 1, b: 2, c: 3 } let sum = 0 for (const k in obj) { sum += obj[k] // read the value from key } console.log(sum) // 6
特別注意for of和for in的區(qū)別,前者的代表變量是項目的值(value),后者的代表變量是屬性的名稱(key)。
4. forEach方法
Array.forEach(Function)
forEach是JS數(shù)組的原生方法。它接受一個函數(shù)作為參數(shù),執(zhí)行效果是對數(shù)組的每一個項目,執(zhí)行傳入的函數(shù)。傳入的函數(shù)可以接受三個參數(shù):(element, index, array),其中element表示當前項目的值,index表示當前項目的下標,array表示循環(huán)的數(shù)組本身。
例如:
const arr = [1, 2, 3, 4, 5] let sum = 0 arr.forEach(element => sum += element) console.log(sum) // 15
通常在程序中我們更傾向于使用for of循環(huán)來代替forEach方法,因為for關(guān)鍵字使得代碼的可讀性更高。但是在一些特殊的情況下,我們依然會使用forEach方法循環(huán)遍歷數(shù)組中的每個項目。
高級:forEach可以傳入異步函數(shù),等效于使用for await (const v of Array)。
附完整實例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <script> // 此處添加測試數(shù)組 textArr var textArr = [], i = 0; while (i<40000000) { textArr.push(i) i++ } const forTest = (textArr) => { console.time('time forTest') var newArr = [] // 第一種寫法 不帶聲明變量的寫法 (運行效率最好,性能最佳) for (var i = 0; i < textArr.length; i++) { newArr.push(i) } console.timeEnd('time forTest') } const forTest1 = (textArr) => { console.time('time forTest1') var newArr = [] // 第二種帶聲明變量的寫法 (相比之下要差一些) for (var i = 0,len = textArr.length; i < len; i++) { newArr.push(i) } console.timeEnd('time forTest1') } const forTest2 = (textArr) => { console.time('time forTest2') var newArr = [] // 第三種 forEach的寫法 (效率最差,運行最慢) textArr.forEach(item => { newArr.push(item) }) console.timeEnd('time forTest2') } const forTest3 = (textArr) => { console.time('time forTest3') var newArr = [] // 第四種是 for循環(huán)的簡便寫法, (運行效率與不帶聲明變量的寫法相差無幾,相比之下,可以使用這種寫法,最優(yōu)),僅僅是本人的觀點 for (var i = 1,cur; cur = textArr[i++];) { newArr.push(i) } console.timeEnd('time forTest3') } forTest(textArr) forTest1(textArr) forTest2(textArr) forTest3(textArr) </script> </body> </html>
總結(jié)
到此這篇關(guān)于JS中for循環(huán)的四種寫法的文章就介紹到這了,更多相關(guān)JS for循環(huán)寫法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
讓ie6也支持websocket采用flash封裝實現(xiàn)
ie9都不支持websocket,何況ie6,往往這些不可思議的事情卻意想不到的發(fā)生了;websocket能開發(fā)那么酷的功能,怎么能讓ie攔住我們的腳步,用falsh封裝吧,感興趣的你可不要錯過了哈2013-02-02JavaScript獲取系統(tǒng)自帶的顏色選擇器功能(圖)
JavaScript獲取系統(tǒng)自帶的顏色選擇器功能,這個是針對IE瀏覽器,所以大家如果想用兼容性更好的代碼,可以查看腳本之家的相關(guān)文章。2010-08-08Bootstrap面板(Panels)的簡單實現(xiàn)代碼
這篇文章主要為大家詳細介紹了Bootstrap面板(Panels)的簡單實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03深入理解setTimeout函數(shù)和setInterval函數(shù)
下面小編就為大家?guī)硪黄钊肜斫鈙etTimeout函數(shù)和setInterval函數(shù)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-05-05bootstrap modal+gridview實現(xiàn)彈出框效果
這篇文章主要介紹了bootstrap modal+gridview實現(xiàn)彈出框效果,gridview點擊更新彈出填寫信息表單,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08javascript實現(xiàn)倒計時N秒后網(wǎng)頁自動跳轉(zhuǎn)代碼
這篇文章主要介紹了javascript實現(xiàn)倒計時N秒后網(wǎng)頁自動跳轉(zhuǎn)代碼,非常的實用,這里推薦給大家。2014-12-12