迭代器和生成器

迭代器和生成器

可迭代性

當(dāng)一個(gè)對(duì)象實(shí)現(xiàn)了Symbol.iterator屬性時(shí)霎苗,我們認(rèn)為它是可迭代的兢仰。 一些內(nèi)置的類型如 ArrayMap鲤妥,Set咸这,String夷恍,Int32ArrayUint32Array等都已經(jīng)實(shí)現(xiàn)了各自的Symbol.iterator媳维。 對(duì)象上的 Symbol.iterator函數(shù)負(fù)責(zé)返回供迭代的值酿雪。

for..of 語句

for..of會(huì)遍歷可迭代的對(duì)象,調(diào)用對(duì)象上的Symbol.iterator方法侄刽。 下面是在數(shù)組上使用 for..of的簡單例子:

let someArray = [1, "string", false];

for (let entry of someArray) {
  console.log(entry); // 1, "string", false
}

for..of vs. for..in 語句

for..offor..in均可迭代一個(gè)列表指黎;但是用于迭代的值卻不同,for..in迭代的是對(duì)象的 的列表州丹,而for..of則迭代對(duì)象的鍵對(duì)應(yīng)的值醋安。

下面的例子展示了兩者之間的區(qū)別:

let list = [4, 5, 6];

for (let i in list) {
  console.log(i); // "0", "1", "2",
}

for (let i of list) {
  console.log(i); // "4", "5", "6"
}

另一個(gè)區(qū)別是for..in可以操作任何對(duì)象;它提供了查看對(duì)象屬性的一種方法墓毒。 但是 for..of關(guān)注于迭代對(duì)象的值吓揪。內(nèi)置對(duì)象MapSet已經(jīng)實(shí)現(xiàn)了Symbol.iterator方法,讓我們可以訪問它們保存的值所计。

let pets = new Set(["Cat", "Dog", "Hamster"]);
pets["species"] = "mammals";

for (let pet in pets) {
  console.log(pet); // "species"
}

for (let pet of pets) {
  console.log(pet); // "Cat", "Dog", "Hamster"
}

代碼生成

目標(biāo)為 ES5 和 ES3

當(dāng)生成目標(biāo)為 ES5 或 ES3柠辞,迭代器只允許在Array類型上使用。 在非數(shù)組值上使用 for..of語句會(huì)得到一個(gè)錯(cuò)誤主胧,就算這些非數(shù)組值已經(jīng)實(shí)現(xiàn)了Symbol.iterator屬性叭首。

編譯器會(huì)生成一個(gè)簡單的for循環(huán)做為for..of循環(huán)习勤,比如:

let numbers = [1, 2, 3];
for (let num of numbers) {
  console.log(num);
}

生成的代碼為:

var numbers = [1, 2, 3];
for (var _i = 0; _i < numbers.length; _i++) {
  var num = numbers[_i];
  console.log(num);
}

目標(biāo)為 ECMAScript 2015 或更高

當(dāng)目標(biāo)為兼容 ECMAScipt 2015 的引擎時(shí),編譯器會(huì)生成相應(yīng)引擎的for..of內(nèi)置迭代器實(shí)現(xiàn)方式放棒。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末姻报,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子间螟,更是在濱河造成了極大的恐慌吴旋,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厢破,死亡現(xiàn)場(chǎng)離奇詭異荣瑟,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)摩泪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門笆焰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人见坑,你說我怎么就攤上這事嚷掠。” “怎么了荞驴?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵不皆,是天一觀的道長向楼。 經(jīng)常有香客問我飘言,道長,這世上最難降的妖魔是什么拣宏? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任鲫骗,我火速辦了婚禮犬耻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘执泰。我一直安慰自己枕磁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布术吝。 她就那樣靜靜地躺著透典,像睡著了一般。 火紅的嫁衣襯著肌膚如雪顿苇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天税弃,我揣著相機(jī)與錄音纪岁,去河邊找鬼。 笑死则果,一個(gè)胖子當(dāng)著我的面吹牛幔翰,可吹牛的內(nèi)容都是我干的漩氨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼遗增,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼叫惊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起做修,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤霍狰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后饰及,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔗坯,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年燎含,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宾濒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡屏箍,死狀恐怖绘梦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赴魁,我是刑警寧澤卸奉,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站尚粘,受9級(jí)特大地震影響择卦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜郎嫁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一秉继、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧泽铛,春花似錦尚辑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至弛随,卻和暖如春瓢喉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背舀透。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工栓票, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人愕够。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓走贪,卻偏偏與公主長得像佛猛,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子坠狡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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

  • 轉(zhuǎn)發(fā) # TypeScript基礎(chǔ)入門之迭代器和生成器 迭代性 如果對(duì)象具有Symbol.iterator屬性的實(shí)...
    鵬鯤云之上閱讀 752評(píng)論 0 1
  • 可迭代性 當(dāng)一個(gè)對(duì)象實(shí)現(xiàn)了Symbol.iterator屬性時(shí)继找,我們認(rèn)為它是可迭代的。 一些內(nèi)置的類型如 Arra...
    2o壹9閱讀 1,013評(píng)論 2 48
  • 1、Iterator迭代器 ->遵循迭代模式思想實(shí)現(xiàn)感挥,分為內(nèi)部迭代器缩搅、外部迭代器,聚焦點(diǎn):添加迭代接口 (1).迭...
    官清歲月閱讀 212評(píng)論 0 1
  • 迭代器和生成器 前置知識(shí):JavaScrip已經(jīng)提供多個(gè)迭代集合的方法触幼,從簡單的for循環(huán)到map()和filte...
    Daeeman閱讀 185評(píng)論 0 2
  • for..of 語句for..of會(huì)遍歷可迭代的對(duì)象硼瓣,調(diào)用對(duì)象上的Symbol.iterator方法。 下面是在數(shù)...
    風(fēng)之傷_3eed閱讀 248評(píng)論 0 0