成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

ES6的Iterator對(duì)象詳解

KoreyLee / 2382人閱讀

摘要:實(shí)現(xiàn)原理創(chuàng)建一個(gè)指針對(duì)象,指向當(dāng)前數(shù)據(jù)結(jié)構(gòu)的起始位置。也就是說(shuō),遍歷器對(duì)象本質(zhì)上,就是一個(gè)指針對(duì)象。具體來(lái)說(shuō),就是返回一個(gè)包含和兩個(gè)屬性的對(duì)象。接口部署在對(duì)象的屬性上可以調(diào)用這個(gè)屬性,就得到遍歷器對(duì)象。

Iterator實(shí)現(xiàn)原理

創(chuàng)建一個(gè)指針對(duì)象,指向當(dāng)前數(shù)據(jù)結(jié)構(gòu)的起始位置。也就是說(shuō),遍歷器對(duì)象本質(zhì)上,就是一個(gè)指針對(duì)象。

第一次調(diào)用指針對(duì)象的next方法,可以將指針指向數(shù)據(jù)結(jié)構(gòu)的第一個(gè)成員。

第二次調(diào)用指針對(duì)象的next方法,指針就指向數(shù)據(jù)結(jié)構(gòu)的第二個(gè)成員。

不斷調(diào)用指針對(duì)象的next方法,直到它指向數(shù)據(jù)結(jié)構(gòu)的結(jié)束位置。

每一次調(diào)用next方法,都會(huì)返回?cái)?shù)據(jù)結(jié)構(gòu)的當(dāng)前成員的信息。具體來(lái)說(shuō),就是返回一個(gè)包含value和done兩個(gè)屬性的對(duì)象。其中,value屬性是當(dāng)前成員的值,done屬性是一個(gè)布爾值,表示遍歷是否結(jié)束。

ES6 里的迭代器并不是一種新的語(yǔ)法或者是新的內(nèi)置對(duì)象(構(gòu)造函數(shù)), 而是一種協(xié)議,所有遵循了這個(gè)協(xié)議的對(duì)象都可以稱之為迭代器對(duì)象,所以說(shuō)迭代器是一種協(xié)議,一個(gè)統(tǒng)一的接口標(biāo)準(zhǔn),兩個(gè)屬性都不返回值也不會(huì)報(bào)錯(cuò),但是不符合協(xié)議標(biāo)準(zhǔn)了,就不能稱作迭代器了

如何部署Iterator接口

在ES6中,有三類數(shù)據(jù)結(jié)構(gòu)原生具備Iterator接口:數(shù)組、某些類似數(shù)組的對(duì)象、Set和Map結(jié)構(gòu),對(duì)象(Object)之所以沒(méi)有默認(rèn)部署Iterator接口,是因?yàn)閷?duì)象的哪個(gè)屬性先遍歷,哪個(gè)屬性后遍歷是不確定的,需要開(kāi)發(fā)者手動(dòng)指定。

Iterator接口部署在對(duì)象的Symbol.Iterator屬性上, 可以調(diào)用這個(gè)屬性,就得到遍歷器對(duì)象。

     var arr = ["a", "b", "c"];
     var iterator = arr[Symbol.iterator]();
     var a = iterator.next();
     console.log(a)   //{value: "a", done: false}
for--of與for--in

for...in 遍歷每一個(gè)屬性名稱,而 for...of遍歷每一個(gè)屬性值。

在對(duì)象沒(méi)有部署Iterator接口的情況下調(diào)用for...of會(huì)報(bào)錯(cuò)。當(dāng)一個(gè)部署了Iterator接口的對(duì)象調(diào)用for...of時(shí),
實(shí)現(xiàn)的步驟是這樣的:

調(diào)用對(duì)象的Symbol.Iterator的屬性獲得遍歷器生成函數(shù);

調(diào)用遍歷器生成函數(shù)返回遍歷器對(duì)象
其實(shí)for...of就相當(dāng)于一直調(diào)用遍歷器對(duì)象的next方法,直到返回done為true;

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/79715.html

相關(guān)文章

  • ES6 變量聲明與賦值:值傳遞、淺拷貝與深拷貝詳解

    摘要:變量聲明與賦值值傳遞淺拷貝與深拷貝詳解歸納于筆者的現(xiàn)代開(kāi)發(fā)語(yǔ)法基礎(chǔ)與實(shí)踐技巧系列文章。變量聲明在中,基本的變量聲明可以用方式允許省略,直接對(duì)未聲明的變量賦值。按值傳遞中函數(shù)的形參是被調(diào)用時(shí)所傳實(shí)參的副本。 ES6 變量聲明與賦值:值傳遞、淺拷貝與深拷貝詳解歸納于筆者的現(xiàn)代 JavaScript 開(kāi)發(fā):語(yǔ)法基礎(chǔ)與實(shí)踐技巧系列文章。本文首先介紹 ES6 中常用的三種變量聲明方式,然后討論了...

    snowLu 評(píng)論0 收藏0
  • ES6】迭代器與可迭代對(duì)象

    摘要:通過(guò)生成器創(chuàng)建的迭代器也是可迭代對(duì)象,因?yàn)樯善髂J(rèn)會(huì)為屬性賦值。我們可以用來(lái)訪問(wèn)對(duì)象的默認(rèn)迭代器,例如對(duì)于一個(gè)數(shù)組獲得了數(shù)組這個(gè)可迭代對(duì)象的默認(rèn)迭代器,并操作它遍歷了數(shù)組中的元素。 ES6 新的數(shù)組方法、集合、for-of 循環(huán)、展開(kāi)運(yùn)算符(...)甚至異步編程都依賴于迭代器(Iterator )實(shí)現(xiàn)。本文會(huì)詳解 ES6 的迭代器與生成器,并進(jìn)一步挖掘可迭代對(duì)象的內(nèi)部原理與使用方法 ...

    terasum 評(píng)論0 收藏0
  • es6 Generators詳解

    摘要:每個(gè)任務(wù)必須顯式地掛起自己,在任務(wù)切換發(fā)生時(shí)給予它完全的控制。在這些嘗試中,數(shù)據(jù)經(jīng)常在任務(wù)之間共享。但由于明確的暫停,幾乎沒(méi)有風(fēng)險(xiǎn)。 翻譯自 github 概述 什么是generators? 我們可以把generators理解成一段可以暫停并重新開(kāi)始執(zhí)行的函數(shù) function* genFunc() { // (A) console.log(First); yi...

    zhaot 評(píng)論0 收藏0
  • ES6中Array.from()函數(shù)詳解

    摘要:注意屬性名代表了數(shù)組的索引號(hào),如果沒(méi)有這個(gè)索引號(hào),轉(zhuǎn)出來(lái)的數(shù)組中對(duì)應(yīng)的元素就為空。對(duì)象的屬性名不能轉(zhuǎn)換成索引號(hào)時(shí)。可選參數(shù)可選參數(shù),執(zhí)行回調(diào)函數(shù)時(shí)對(duì)象。 ES6為Array增加了from函數(shù)用來(lái)從一個(gè)類似數(shù)組或可迭代對(duì)象中創(chuàng)建一個(gè)新的,淺拷貝的數(shù)組實(shí)例。不過(guò)只可以將一下兩種對(duì)象轉(zhuǎn)換成數(shù)組。1.部署了Iterator接口的對(duì)象,比如:Set,Map,Array。2.類數(shù)組對(duì)象,什么叫類數(shù)...

    zzzmh 評(píng)論0 收藏0
  • ES6語(yǔ)法詳解(一)

    摘要:凍結(jié)對(duì)象可以使用方法。對(duì)象的解構(gòu)賦值必須要屬性名相同,順序毫無(wú)影響。數(shù)組解構(gòu)賦值默認(rèn)值,當(dāng)?shù)忍?hào)右邊的值時(shí),默認(rèn)值生效。 let變量 let聲明的變量在let命令所在的代碼塊中有效。不存在變量提升,只能先聲明后使用。 暫存死區(qū) 如果區(qū)塊中存在let和const命令,這個(gè)區(qū)塊對(duì)這些命令聲明的變量,從一開(kāi)始就形成了封閉作用域。凡是在聲明之前就使用這些變量。 var a = 1; { ...

    wendux 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<