es6解讀6- Iterator 和 for...of 循環(huán)

什么是Iterator接口

  • ES6中內(nèi)置了一些Symbol,其中最重要的一個恐怕就是Symbol.iterator了饰豺,相當于迭代器的接口亿鲜,只有對象里有這個symbol的屬性,才可以認為此對象是可迭代的冤吨。
  • 我們先看一下規(guī)范中對這個symbol的描述:
    A method that returns the default Iterator for an object. Called by the semantics of the for-of statement.
  • js中哪些對象里實現(xiàn)了這個接口呢蒿柳?常見的有Array,String漩蟆,arguments其馏,還有后面高級的數(shù)據(jù)結(jié)構(gòu),如Set爆安,Map等叛复。

Iterator的基本用法

for...of

  • for...of循環(huán)的過程,其實就是通過不斷調(diào)用Iterator接口來達到這種形式扔仓;
  • 也就是說褐奥,不同的數(shù)據(jù)結(jié)構(gòu),通過for...of這種統(tǒng)一的形式翘簇,來達到讀取不同數(shù)據(jù)結(jié)構(gòu)的目標撬码;但是背后的Iterator接口其實不同;

數(shù)組自動幫我們帶了iterator接口

let arr=['hello','world'];
let map=arr[Symbol.iterator]();
console.log(map.next());
console.log(map.next());
console.log(map.next());

Object {value: "hello", done: false};done代表版保,是否做完了所有操作呜笑,true:代表是; false:代表無彻犁,還有其他操作叫胁;

Object對象不是一個iterator,那么如何把它變成一個iterator呢汞幢?

let obj={
   start:[1,3,2],
    end:[7,8,9],
    [Symbol.iterator](){
        let self=this;
        let index=0;
        let arr=self.start.concat(self.end);
        let len=arr.length;
        return {
            next (){
                if(index<len){
                    return {
                        value:arr[index++],
                        done:false
                    }
                }else{
                    return {
                        value:arr[index++],
                        done:true
                    }

                }
            }
        }
    }
}
for(let key of obj){
    console.log(key);
}

let...of的使用

let arr=['hello','world'];
for(let value of arr){
   console.log(value);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驼鹅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子森篷,更是在濱河造成了極大的恐慌输钩,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仲智,死亡現(xiàn)場離奇詭異买乃,居然都是意外死亡,警方通過查閱死者的電腦和手機钓辆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門剪验,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哼绑,“玉大人,你說我怎么就攤上這事碉咆。” “怎么了蛀恩?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵疫铜,是天一觀的道長。 經(jīng)常有香客問我双谆,道長壳咕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任顽馋,我火速辦了婚禮谓厘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寸谜。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布罩缴。 她就那樣靜靜地躺著咪橙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪果善。 梳的紋絲不亂的頭發(fā)上诊笤,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音巾陕,去河邊找鬼讨跟。 笑死,一個胖子當著我的面吹牛鄙煤,可吹牛的內(nèi)容都是我干的晾匠。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼梯刚,長吁一口氣:“原來是場噩夢啊……” “哼混聊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起乾巧,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤句喜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后沟于,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咳胃,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年旷太,在試婚紗的時候發(fā)現(xiàn)自己被綠了展懈。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片销睁。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖存崖,靈堂內(nèi)的尸體忽然破棺而出冻记,到底是詐尸還是另有隱情,我是刑警寧澤来惧,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布冗栗,位于F島的核電站,受9級特大地震影響供搀,放射性物質(zhì)發(fā)生泄漏隅居。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一葛虐、第九天 我趴在偏房一處隱蔽的房頂上張望胎源。 院中可真熱鬧,春花似錦屿脐、人聲如沸涕蚤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赞季。三九已至,卻和暖如春奢驯,著一層夾襖步出監(jiān)牢的瞬間申钩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工瘪阁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留撒遣,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓管跺,卻偏偏與公主長得像义黎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子豁跑,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

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

  • Iterator(遍歷器)的概念 JavaScript原有的表示“集合”的數(shù)據(jù)結(jié)構(gòu)廉涕,主要是數(shù)組(Array)和對象...
    呼呼哥閱讀 4,441評論 0 2
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)艇拍,斷路器狐蜕,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • 是你改變了我(費思屹) 風再那么大,雨再那么猛卸夕,只一句話語层释,改變了我,終生難忘快集。 從小贡羔,你就教導(dǎo)我廉白,做人,要有做...
    簡約語文閱讀 406評論 0 1
  • 1.你的靈感來源有哪些乖寒? 我的靈感來源主要是生活還有自己的天馬行空猴蹂。生活中看到的事物,周遭朋友的故事楣嘁,看的書磅轻,看的...
    曉越明閱讀 417評論 0 7