国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解ES6語法之可迭代協議和迭代器協議

2024-05-06 15:22:39
字體:
來源:轉載
供稿:網友

ECMAScript 2015的幾個補充,并不是新的內置或語法,而是協議。這些協議可以被任何遵循某些約定的對象來實現。
有兩個協議:可迭代協議和迭代器協議。

可迭代協議

可迭代協議允許 JavaScript 對象去定義或定制它們的迭代行為, 例如(定義)在一個 for..of 結構中什么值可以被循環(得到)。一些內置類型都是內置的可迭代對象并且有默認的迭代行為, 比如 Array or Map, 另一些類型則不是 (比如Object) 。

Iterator 接口的目的,就是為所有數據結構,提供了一種統一的訪問機制,即for...of循環(詳見下文)。當使用for...of循環遍歷某種數據結構時,該循環會自動去尋找 Iterator 接口,調用Symbol.iterator方法,返回該對象的默認遍歷器。

ES6 規定,默認的 Iterator 接口部署在數據結構的Symbol.iterator屬性,或者說,一個數據結構只要具有Symbol.iterator屬性,就可以認為是“可迭代的”(iterable)。Symbol.iterator屬性本身是一個函數,就是當前數據結構默認的遍歷器生成函數。執行這個函數,就會返回一個遍歷器。

為了變成可迭代對象, 一個對象必須實現(或者它原型鏈的某個對象)必須有一個名字是 Symbol.iterator 的屬性:

迭代器協議

該迭代器協議定義了一種標準的方式來產生一個有限或無限序列的值。

JavaScript 原有的表示“集合”的數據結構,主要是數組(Array)和對象(Object),ES6 又添加了Map和Set。這樣就有了四種數據集合,用戶還可以組合使用它們,定義自己的數據結構,比如數組的成員是Map,Map的成員是對象。這樣就需要一種統一的接口機制,來處理所有不同的數據結構。

迭代器(Iterator)就是這樣一種機制。它是一種接口,為各種不同的數據結構提供統一的訪問機制。任何數據結構只要部署 Iterator 接口,就可以完成遍歷操作(即依次處理該數據結構的所有成員)。

Iterator 的作用有三個:一是為各種數據結構,提供一個統一的、簡便的訪問接口;二是使得數據結構的成員能夠按某種次序排列;三是 ES6 創造了一種新的遍歷命令for...of循環,Iterator 接口主要供for...of消費。

Iterator 的遍歷過程是這樣的。

    創建一個指針對象,指向當前數據結構的起始位置。也就是說,遍歷器對象本質上,就是一個指針對象。 第一次調用指針對象的next方法,可以將指針指向數據結構的第一個成員。 第二次調用指針對象的next方法,指針就指向數據結構的第二個成員。 不斷調用指針對象的next方法,直到它指向數據結構的結束位置。

每一次調用next方法,都會返回數據結構的當前成員的信息。具體來說,就是返回一個包含value和done兩個屬性的對象。其中,value屬性是當前成員的值,done屬性是一個布爾值,表示遍歷是否結束。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 德保县| 腾冲县| 江口县| 通江县| 新竹县| 天柱县| 昌都县| 霸州市| 三原县| 获嘉县| 宁海县| 孝感市| 长宁区| 和林格尔县| 沅陵县| 鄂温| 嵊州市| 山东省| 九江县| 宝清县| 太仆寺旗| 南昌市| 中西区| 黄石市| 乌兰察布市| 资兴市| 星子县| 宜君县| 阳原县| 吉首市| 祁门县| 潮州市| 梅州市| 泸溪县| 定兴县| 乐业县| 洮南市| 衡阳县| 衡阳市| 民勤县| 永福县|