国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

深入解讀JavaScript中的Iterator和for-of循環(huán)

2019-11-20 11:58:57
字體:
供稿:網(wǎng)友

如何遍歷一個數(shù)組的元素?在 20 年前,當(dāng) JavaScript 出現(xiàn)時,你也許會這樣做:

for (var index = 0; index < myArray.length; index++) { console.log(myArray[index]);} for (var index = 0; index < myArray.length; index++) { console.log(myArray[index]);}

自從 ES5 開始,你可以使用內(nèi)置的 forEach 方法:

JavaScriptmyArray.forEach(function (value) { console.log(value);}); myArray.forEach(function (value) { console.log(value);});

代碼更為精簡,但有一個小缺點:不能使用 break 語句來跳出循環(huán),也不能使用 return 語句來從閉包函數(shù)中返回。

如果有 for- 這種語法來遍歷數(shù)組就會方便很多。

那么,使用 for-in 怎么樣?

for (var index in myArray) { // 實際代碼中不要這么做 console.log(myArray[index]);} for (var index in myArray) { // 實際代碼中不要這么做 console.log(myArray[index]);}

這樣不好,因為:

    上面代碼中的 index 變量將會是 "0"、"1"、"3" 等這樣的字符串,而并不是數(shù)值類型。如果你使用字符串的 index 去參與某些運算("2" + 1 == "21"),運算結(jié)果可能會不符合預(yù)期。
    不僅數(shù)組本身的元素將被遍歷到,那些由用戶添加的附加(expando)元素也將被遍歷到,例如某數(shù)組有這樣一個屬性 myArray.name,那么在某次循環(huán)中將會出現(xiàn) index="name" 的情況。而且,甚至連數(shù)組原型鏈上的屬性也可能被遍歷到。
    最不可思議的是,在某些情況下,上面代碼將會以任意順序去遍歷數(shù)組元素。

簡單來說,for-in 設(shè)計的目的是用于遍歷包含鍵值對的對象,對數(shù)組并不是那么友好。
強大的 for-of 循環(huán)

記得上次我提到過,ES6 并不會影響現(xiàn)有 JS 代碼的正常運行,已經(jīng)有成千上萬的 Web 應(yīng)用都依賴于 for-in 的特性,甚至也依賴 for-in 用于數(shù)組的特性,所以從來就沒有人提出“改善”現(xiàn)有 for-in 語法來修復(fù)上述問題。ES6 解決該問題的唯一辦法是引入新的循環(huán)遍歷語法。

這就是新的語法:

for (var value of myArray) { console.log(value);} for (var value of myArray) { console.log(value);}

通過介紹上面的 for-in 語法,這個語法看起來并不是那么令人印象深刻。后面我們將詳細(xì)介紹for-of 的奇妙之處,現(xiàn)在你只需要知道: