如何遍歷一個數(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)在你只需要知道: