JS基礎(chǔ)回顧:iterable類(lèi)型循環(huán)

遍歷Array可以采用下標(biāo)循環(huán)综芥,遍歷Map和Set就無(wú)法使用下標(biāo)忘蟹。為了統(tǒng)一集合類(lèi)型泰演,ES6標(biāo)準(zhǔn)引入了新的iterable類(lèi)型呻拌,Array、Map和Set都屬于iterable類(lèi)型睦焕。

具有iterable類(lèi)型的集合可以通過(guò)新的for ... of循環(huán)來(lái)遍歷藐握。

for ... of循環(huán)是ES6引入的新的語(yǔ)法,請(qǐng)測(cè)試你的瀏覽器是否支持:

'use strict';
var a = [1, 2, 3];
for (var x of a) {
}
alert('你的瀏覽器支持for ... of');

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

var a = ['A', 'B', 'C'];
var s = new Set(['A', 'B', 'C']);
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
for (var x of a) { // 遍歷Array
    alert(x);
}
for (var x of s) { // 遍歷Set
    alert(x);
}
for (var x of m) { // 遍歷Map
    alert(x[0] + '=' + x[1]);
}

for ... of循環(huán)和for ... in循環(huán)有何區(qū)別猾普?

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

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

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

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

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

var a = ['A', 'B', 'C'];
a.name = 'Hello';
for (var x of a) {
    alert(x); // 'A', 'B', 'C'
}
然而炕泳,更好的方式:

直接使用iterable內(nèi)置的★forEach方法纵诞,它接收一個(gè)函數(shù),每次迭代就自動(dòng)回調(diào)該函數(shù)培遵。

以Array為例:

var a = ['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)引入的浙芙,你需要測(cè)試瀏覽器是否支持。

  • Set與Array類(lèi)似籽腕,但Set沒(méi)有索引嗡呼,因此回調(diào)函數(shù)的前兩個(gè)參數(shù)都是元素本身
var s = new Set(['A', 'B', 'C']);
s.forEach(function (element, sameElement, set) {
    alert(element);
});
  • Map的回調(diào)函數(shù)參數(shù)依次為value、key和map本身:
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
m.forEach(function (value, key, map) {
    alert(value);
});

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

var a = ['A', 'B', 'C'];
a.forEach(function (element) {
    alert(element);
});
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末万伤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子呜袁,更是在濱河造成了極大的恐慌敌买,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阶界,死亡現(xiàn)場(chǎng)離奇詭異虹钮,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)荐操,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)芜抒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人托启,你說(shuō)我怎么就攤上這事宅倒。” “怎么了屯耸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵拐迁,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我疗绣,道長(zhǎng)线召,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任多矮,我火速辦了婚禮缓淹,結(jié)果婚禮上哈打,老公的妹妹穿的比我還像新娘。我一直安慰自己讯壶,他們只是感情好料仗,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著伏蚊,像睡著了一般立轧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上躏吊,一...
    開(kāi)封第一講書(shū)人閱讀 52,682評(píng)論 1 312
  • 那天氛改,我揣著相機(jī)與錄音,去河邊找鬼比伏。 笑死胜卤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赁项。 我是一名探鬼主播瑰艘,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼肤舞!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起均蜜,我...
    開(kāi)封第一講書(shū)人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤李剖,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后囤耳,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體篙顺,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年充择,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了德玫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡椎麦,死狀恐怖宰僧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情观挎,我是刑警寧澤琴儿,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站嘁捷,受9級(jí)特大地震影響造成,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雄嚣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一晒屎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦鼓鲁、人聲如沸蕴轨。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)尺棋。三九已至,卻和暖如春绵跷,著一層夾襖步出監(jiān)牢的瞬間膘螟,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工碾局, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荆残,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓净当,卻偏偏與公主長(zhǎng)得像内斯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子像啼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容