es6中陣列可以用for of遍歷。 「for...of」語句建立一個迴圈來迭代可迭代的對象,ES6引入「for...of」迴圈用以取代「for...in」和forEach(),並支援新的迭代協議;「for...of」語句允許開發者遍歷Arrays(陣列)、Strings(字串)、Maps(映射)、 Sets(集合)等可迭代的資料結構。
本教學操作環境:windows7系統、ECMAScript 6版、Dell G3電腦。
什麼是 for…of 迴圈
for...of
語句建立一個迴圈來迭代可迭代的物件。在 ES6 中引入的 for...of
循環,以取代 for...in
和 forEach()
,並支援新的迭代協定。 for...of
允許你遍歷 Arrays(陣列), Strings(字串), Maps(映射), Sets(集合)等可迭代的資料結構等。
語法
for (variable of iterable) { statement }
- variable:每個迭代的屬性值被指派給該變數。
- iterable:一個具有可枚舉屬性並且可以迭代的物件。
用例
我們來探討一些用例。
Arrays(數組)
Arrays(陣列)就是類別列表(list-like)物件。數組原型上有各種方法,允許對其進行操作,例如修改和遍歷等操作。下面手在一個陣列上進行的 for...of
運算:
// array-example.js const iterable = ['mini', 'mani', 'mo']; for (const value of iterable) { console.log(value); } // Output: // mini // mani // mo
其結果就是印出 iterable
陣列中的每一個值。
Demo: https://jsbin.com/dimahag/edit?js,console
Maps(映射)
Map 物件就是保存key-value(鍵值)對。物件和原始值可以用作 key(鍵)或 value(值)。 Map 物件根據其插入方式迭代元素。換句話說, for...of
迴圈將為每次迭代傳回一個 key-value(鍵值) 陣列。
// map-example.js const iterable = new Map([['one', 1], ['two', 2]]); for (const [key, value] of iterable) { console.log(`Key: ${key} and Value: ${value}`); } // Output: // Key: one and Value: 1 // Key: two and Value: 2
Demo: https://jsbin.com/lofewiw/edit?js,console
Set(集合)
Set(集合) 物件允許你儲存任何類型的唯一值,這些值可以是原始值或物件。 Set(集合) 物件只是值的集合。 Set(集合) 元素的迭代是基於其插入順序。 Set(集合) 中的值只能發生一次。如果您建立一個具有多個相同元素的 Set(集合) ,那麼它仍然被視為單一元素。
// set-example.js const iterable = new Set([1, 1, 2, 2, 1]); for (const value of iterable) { console.log(value); } // Output: // 1 // 2
#儘管我們的Set(集合) 有多個 1
和 2
,但輸出的只有 1
和 2
。
Demo: https://jsbin.com/fajozob/edit?js,console
String(字串)
字串用於以文字形式儲存資料。
// string-example.js const iterable = 'javascript'; for (const value of iterable) { console.log(value); } // Output: // "j" // "a" // "v" // "a" // "s" // "c" // "r" // "i" // "p" // "t"
這裡,對字串執行迭代,並列印出每個索引上的字元。
Demo: https://jsbin.com/rixakeg/edit?js,console
Arguments Object(參數物件)
把一個參數物件看作是一個類數組(array-like)對象,並且對應於傳遞給函數的參數。這是一個用例:
// arguments-example.js function args() { for (const arg of arguments) { console.log(arg); } } args('a', 'b', 'c'); // Output: // a // b // c
你可能會想,發生了什麼事?! 如前所述,當呼叫函數時,arguments
會接收傳入 args()
函數的任何參數。所以,如果我們將 20 個參數傳遞給 args()
函數,我們將列印出 20 個參數。
Demo: https://jsbin.com/ciqabov/edit?js,console
Generators(生成器)
產生器是一個函數,它可以退出函數,稍後重新進入函數。
// generator-example.js function* generator(){ yield 1; yield 2; yield 3; }; for (const g of generator()) { console.log(g); } // Output: // 1 // 2 // 3
function*
定義了一個生成器函數,該函數傳回生成器物件(Generator object)。更多關於生成器相關的信息,可以點選這裡。
Demo: https://jsbin.com/faviyi/edit?js,console
退出迭代
JavaScript 提供了四種已知的終止迴圈執行的方法:break
、continue
、return
和 throw
。讓我們來看一個例子:
const iterable = ['mini', 'mani', 'mo']; for (const value of iterable) { console.log(value); break; } // Output: // mini
在這個範例中,我們使用 break
關鍵字在一次執行後終止循環,所以只有 mini
被印出來。
Demo: https://jsbin.com/tisuken/edit?js,console
普通物件不可迭代
##for...of循環僅適用於迭代。而普通物件不可迭代。讓我們來看看:
const obj = { fname: 'foo', lname: 'bar' }; for (const value of obj) { // TypeError: obj[Symbol.iterator] is not a function console.log(value); }在這裡,我們定義了一個普通物件
obj ,並且當我們嘗試
for...of 對其進行操作時,會報錯:
TypeError: obj[Symbol.iterator] is not a function。
#
我们可以通过将类数组(array-like)对象转换为数组来绕过它。该对象将具有一个 length
属性,其元素必须可以被索引。我们来看一个例子:
// object-example.js const obj = { length: 3, 0: 'foo', 1: 'bar', 2: 'baz' }; const array = Array.from(obj); for (const value of array) { console.log(value); } // Output: // foo // bar // baz
Array.from()
方法可以让我通过类数组(array-like)或可迭代对象来创建一个新的 Array(数组) 实例。
Demo: https://jsbin.com/miwofin/edit?js,console
For…of vs For…in
for...in
循环将遍历对象的所有可枚举属性。
//for-in-example.js Array.prototype.newArr = () => {}; Array.prototype.anotherNewArr = () => {}; const array = ['foo', 'bar', 'baz']; for (const value in array) { console.log(value); } // Outcome: // 0 // 1 // 2 // newArr // anotherNewArr
for...in
不仅枚举上面的数组声明,它还从构造函数的原型中查找继承的非枚举属性,在这个例子中,newArr
和 anotherNewArr
也会打印出来。
Demo: https://jsbin.com/quxojof/edit?js,console
for...of
更多用于特定于集合(如数组和对象),但不包括所有对象。
注意:任何具有 Symbol.iterator
属性的元素都是可迭代的。
Array.prototype.newArr = () => {}; const array = ['foo', 'bar', 'baz']; for (const value of array) { console.log(value); } // Outcome: // foo // bar // baz
for...in
不考虑构造函数原型的不可枚举属性。它只需要查找可枚举属性并将其打印出来。
Demo: https://jsbin.com/sakado/edit?js,console
小结
了解 for...of
循环的使用可以在开发过程中节省大量的时间。 希望本文帮助你在JavaScript开发中了解和编写更好的循环结构。 让你快乐编码!
完整的示例代码:https://github.com/codediger/javascript-for-of-loop
【相关推荐:javascript视频教程、编程视频】
以上是es6中數組可以用for of遍歷嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

useState()isaReacthookusedtomanagestateinfunctionalcomponents.1)Itinitializesandupdatesstate,2)shouldbecalledatthetoplevelofcomponents,3)canleadto'stalestate'ifnotusedcorrectly,and4)performancecanbeoptimizedusinguseCallbackandproperstateupdates.

ReactispupularduetoItsOmpontement,基於虛擬,虛擬詞,Richecosystem和declarativedation.1)基於組件的harchitectureallowslowsforreusableuipieces。

todebugreactapplicationsefectefectionfection,usethestertate:1)proppropdrillingwithcontextapiorredux.2)使用babortControllerToptopRollerTopRollerTopRollerTopRollerTopRollerTopRollerTopRollerTopRollerTopRollerTopRaceeDitions.3)intleleassynChronOusOperations.3)

usestate()inrectallowsStateMagementionInfunctionalComponents.1)ITSIMPLIFIESSTATEMAGEMENT,MACHECODEMORECONCONCISE.2)usetheprevcountfunctionToupdateStateBasedonitspReviousViousViousvalue,deveingingStaleStateissues.3)

selectUsestate()forsimple,獨立的variables; useusereducer()forcomplexstateLogicorWhenStatedIppedsonPreviousState.1)usestate()isidealForsImpleupDatesLikeToggGlikGlingaBglingAboolAboolAupDatingacount.2

useState優於類組件和其它狀態管理方案,因為它簡化了狀態管理,使代碼更清晰、更易讀,並與React的聲明性本質一致。 1)useState允許在函數組件中直接聲明狀態變量,2)它通過鉤子機制在重新渲染間記住狀態,3)使用useState可以利用React的優化如備忘錄化,提升性能,4)但需注意只能在組件頂層或自定義鉤子中調用,避免在循環、條件或嵌套函數中使用。

useUsestate()forlocalComponentStateMangementighatighation; 1)usestate()isidealforsimple,localforsimple.2)useglobalstate.2)useglobalstateSolutionsLikErcontExtforsharedState.3)

ReusableComponentsInrectenHanceCodainainability and效率byallowingDevelostEsteSeTheseTheseThesAmeCompOntionActActRossDifferentPartSofanApplicationorprojects.1)heSredunceRedUndenceNandSimplifyUpdates.2)yensureconsistencyInuserexperience.3)


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

Dreamweaver CS6
視覺化網頁開發工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。