javaScript 基礎(chǔ) 03

iterabel

用for ... of循環(huán)遍歷集合,用法如下:

vara = ['A','B','C'];vars =newSet(['A','B','C']);varm =newMap([[1,'x'], [2,'y'], [3,'z']]);for(varx of a) {// 遍歷Arrayalert(x);}for(varx of s) {// 遍歷Setalert(x);}for(varx of m) {// 遍歷Mapalert(x[0] +'='+ x[1]);}

你可能會(huì)有疑問,for ... of循環(huán)和for ... in循環(huán)有何區(qū)別?

for ... in循環(huán)由于歷史遺留問題,它遍歷的實(shí)際上是對(duì)象的屬性名稱。一個(gè)Array數(shù)組實(shí)際上也是一個(gè)對(duì)象,它的每個(gè)元素的索引被視為一個(gè)屬性。

當(dāng)我們手動(dòng)給Array對(duì)象添加了額外的屬性后,for ... in循環(huán)將帶來意想不到的意外效果:

vara = ['A','B','C'];a.name='Hello';for(varxina) {? ? alert(x);// '0', '1', '2', 'name'}

for ... in循環(huán)將把name包括在內(nèi),但Array的length屬性卻不包括在內(nèi)。

for ... of循環(huán)則完全修復(fù)了這些問題,它只循環(huán)集合本身的元素:

vara = ['A','B','C'];a.name='Hello';for(varx of a) {? ? alert(x);'A','B','C'}

這就是為什么要引入新的for ... of循環(huán)。

然而,更好的方式是直接使用iterable內(nèi)置的forEach方法,它接收一個(gè)函數(shù),每次迭代就自動(dòng)回調(diào)該函數(shù)。以Array為例:

vara = ['A','B','C'];a.forEach(function(element, index, array) {// element: 指向當(dāng)前元素的值// index: 指向當(dāng)前索引// array: 指向Array對(duì)象本身alert(element);});

注意,forEach()方法是ES5.1標(biāo)準(zhǔn)引入的,你需要測試瀏覽器是否支持。

Set與Array類似,但Set沒有索引,因此回調(diào)函數(shù)的前兩個(gè)參數(shù)都是元素本身:

vars =newSet(['A','B','C']);s.forEach(function(element, sameElement, set) {? ? alert(element);});

Map的回調(diào)函數(shù)參數(shù)依次為value、key和map本身:

varm =newMap([[1,'x'], [2,'y'], [3,'z']]);m.forEach(function(value, key, map) {? ? alert(value);});

如果對(duì)某些參數(shù)不感興趣,由于JavaScript的函數(shù)調(diào)用不要求參數(shù)必須一致,因此可以忽略它們。例如,只需要獲得Array的element:

vara?=?['A','B','C'];

a.forEach(function(element)?{

alert(element);

});

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • **2014真題Directions:Read the following text. Choose the be...
    又是夜半驚坐起閱讀 11,089評(píng)論 0 23
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,921評(píng)論 0 33
  • 【新麗《零極限》 D1】 “荷歐珀諾破諾”大我意識(shí)療法,是一種讓個(gè)人與內(nèi)在神性發(fā)展出伙伴關(guān)系,并在每一刻都尋求修...
    新麗0101閱讀 168評(píng)論 0 0
  • 我姑媽跟我說,女兒是母親的貼心小棉襖。而我跟我媽之間的溝通一直是存在障礙的,好像做個(gè)貼心小棉襖真的難。 小...
    煙花易寒閱讀 859評(píng)論 0 0
  • 像畫布一樣 大手一揮就是一副新作啊 想象力給人類社會(huì)填充了多少美好的情懷 只可惜人們匆匆忙忙都還在路上…… 繁忙的...
    三斤青草閱讀 371評(píng)論 0 2

友情鏈接更多精彩內(nèi)容