JavaScript裡的迴圈方法:forEach,for-in,for-of
JavaScript誕生已經有20多年了,我們一直使用的用來迴圈一個陣列的方法是這樣的:
for (var index = 0; index < myArray.length; index++) { console.log(myArray[index]); }
自從JavaScript5起,我們開始可以使用內建的forEach方法:
myArray.forEach(function (value) { console.log(value); });
寫法簡單了許多,但也有短處:你不能中斷迴圈(使用break語句或使用return語句。
JavaScript裡還有一種迴圈方法:for–in。
for-in迴圈實際是為迴圈”enumerable“物件而設計的:
var obj = {a:1, b:2, c:3}; for (var prop in obj) { console.log("obj." + prop + " = " + obj[prop]); } // 輸出: // "obj.a = 1" // "obj.b = 2" // "obj.c = 3"
你也可以用它來迴圈一個陣列:
for (var index in myArray) { // 不推薦這樣 console.log(myArray[index]); }
不推薦用for-in來迴圈一個陣列,因為,不像物件,陣列的index跟普通的物件屬性不一樣,是重要的數值序列指標。
總之,for–in是用來迴圈帶有字串key的物件的方法。
for-of迴圈
JavaScript6裡引入了一種新的迴圈方法,它就是for-of迴圈,它既比傳統的for迴圈簡潔,同時彌補了forEach和for-in迴圈的短板。
我們看一下它的for-of的語法:
for (var value of myArray) { console.log(value); }
for-of的語法看起來跟for-in很相似,但它的功能卻豐富的多,它能迴圈很多東西。
for-of迴圈使用例子:
迴圈一個陣列(Array):
let iterable = [10, 20, 30]; for (let value of iterable) { console.log(value); } // 10 // 20 // 30
我們可以使用const來替代let,這樣它就變成了在迴圈裡的不可修改的靜態變數。
let iterable = [10, 20, 30]; for (const value of iterable) { console.log(value); } // 10 // 20 // 30
迴圈一個字串:
let iterable = "boo"; for (let value of iterable) { console.log(value); } // "b" // "o" // "o"
迴圈一個型別化的陣列(TypedArray):
let iterable = new Uint8Array([0x00, 0xff]); for (let value of iterable) { console.log(value); } // 0 // 255
迴圈一個Map:
let iterable = new Map([["a", 1], ["b", 2], ["c", 3]]); for (let [key, value] of iterable) { console.log(value); } // 1 // 2 // 3 for (let entry of iterable) { console.log(entry); } // [a, 1] // [b, 2] // [c, 3]
迴圈一個 Set:
let iterable = new Set([1, 1, 2, 2, 3, 3]); for (let value of iterable) { console.log(value); } // 1 // 2 // 3
迴圈一個 DOM collection
迴圈一個DOM collections,比如NodeList,之前我們討論過如何迴圈一個NodeList,現在方便了,可以直接使用for-of迴圈:
// Note: This will only work in platforms that have // implemented NodeList.prototype[Symbol.iterator] let articleParagraphs = document.querySelectorAll("article > p"); for (let paragraph of articleParagraphs) { paragraph.classList.add("read"); }
迴圈一個擁有enumerable屬性的物件
for–of迴圈並不能直接使用在普通的物件上,但如果我們按物件所擁有的屬性進行迴圈,可使用內建的Object.keys()方法:
for (var key of Object.keys(someObject)) { console.log(key + ": " + someObject[key]); }
迴圈一個生成器(generators)
我們可迴圈一個生成器(generators):
function* fibonacci() { // a generator function let [prev, curr] = [0, 1]; while (true) { [prev, curr] = [curr, prev + curr]; yield curr; } } for (let n of fibonacci()) { console.log(n); // truncate the sequence at 1000 if (n >= 1000) { break; } }
相關文章
- JavaScript淺談之迭代器(Iterator) 和for-of迴圈JavaScript
- mybatis foreach迴圈MyBatis
- 2024-03-21 跳出forEach迴圈的3個方法
- MyBatis xml foreach迴圈語句MyBatisXML
- js迴圈(for/for in/forEach/map/for of)詳解JS
- JavaScript中的12種迴圈遍歷方法JavaScript
- javaScript for迴圈JavaScript
- javascript迴圈JavaScript
- JavaScript for of 迴圈JavaScript
- 視訊課程-如何跳出forEach迴圈
- C#程式設計基礎第七課:C#中的基本迴圈語句:while迴圈、do-while迴圈、for迴圈、foreach迴圈的使用C#程式設計While
- 無迴圈 JavaScriptJavaScript
- JavaScript中的while迴圈JavaScriptWhile
- JavaScript的迴圈方式(1)JavaScript
- 理解 JavaScript 中的迴圈JavaScript
- 聊聊Javascript的事件迴圈JavaScript事件
- 為什麼阿里巴巴禁止在 foreach 迴圈裡進行元素的 remove/add 操作阿里REM
- MyBatis中批量插入資料,多重forEach迴圈MyBatis
- JavaScript for 迴圈語句JavaScript
- 記一個 forEach 不能跳出迴圈引發的問題
- JS陣列迴圈的效能和效率分析(for、while、forEach、map、for of)JS陣列While
- js中為什麼for迴圈比forEach效能高?JS
- Java基礎(二)- 普通for迴圈、foreach效能比較Java
- Java Lambda表示式forEach無法跳出迴圈的解決思路Java
- 我理解的javascript事件迴圈(一)JavaScript事件
- 05--JavaScript--1.4迴圈JavaScript
- JavaScript事件迴圈機制JavaScript事件
- JavaScript事件迴圈(Event Loop)JavaScript事件OOP
- Javascript 事件迴圈event loopJavaScript事件OOP
- JavaScript 事件迴圈機制JavaScript事件
- JavaScript-事件迴圈-eventLoopJavaScript事件OOP
- JavaScript跳出for迴圈語句JavaScript
- JavaScript forEach()JavaScript
- 探討兩種迴圈表示方法的區別,while迴圈與for迴圈的小總結While
- C# 9.0新特性詳解系列之二:擴充套件方法GetEnumerator支援foreach迴圈C#套件
- foreach迴圈中為什麼不要進行remove/add操作REM
- Javascript 常見的迴圈方式總結JavaScript
- JavaScript的事件迴圈機制淺析JavaScript事件
- 淺析JavaScript的事件迴圈機制JavaScript事件