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

首頁 > 語言 > JavaScript > 正文

ES6 迭代器(Iterator)和 for.of循環使用方法學習(總結)

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

一、什么是迭代器?

生成器概念在Java,Python等語言中都是具備的,ES6也添加到了JavaScript中。Iterator可以使我們不需要初始化集合,以及索引的變量,而是使用迭代器對象的 next 方法,返回集合的下一項的值,偏向程序化。

迭代器是帶有特殊接口的對象。含有一個next()方法,調用返回一個包含兩個屬性的對象,分別是value和done,value表示當前位置的值,done表示是否迭代完,當為true的時候,調用next就無效了。

ES5中遍歷集合通常都是 for循環,數組還有 forEach 方法,對象就是 for-in,ES6 中又添加了 Map 和 Set,而迭代器可以統一處理所有集合數據的方法。迭代器是一個接口,只要你這個數據結構暴露了一個iterator的接口,那就可以完成迭代。ES6創造了一種新的遍歷命令for...of循環,Iterator接口主要供for...of消費。

二、如何使用迭代器?

1、默認 Iterator 接口

數據結構只要部署了 Iterator 接口,我們就成這種數據結構為“可遍歷”(Iterable)。ES6 規定,默認的 Iterator 接口部署在數據結構的 Symbol.iterator 屬性,或者說,一個數據結構只要具有 Symbol.iterator 數據,就可以認為是“可遍歷的”(iterable)。

可以供 for...of 消費的原生數據結構

    Array Map Set String TypedArray(一種通用的固定長度緩沖區類型,允許讀取緩沖區中的二進制數據) 函數中的 arguments 對象 NodeList 對象

可以看上面的原生數據結構中并沒有對象(Object),為什么呢?

那是因為對象屬性的遍歷先后順序是不確定的,需要開發者手動指定。本質上,遍歷器是一種線性處理,對于任何非線性的數據結構,部署遍歷器接口就等于部署一種線性變換。

做如下處理,可以使對象供 for...of 消費:

// code1function Obj(value) {  this.value = value;  this.next = null;}Obj.prototype[Symbol.iterator] = function() {  var iterator = {    next: next  };  var current = this;  function next() {    if (current) {      var value = current.value;      current = current.next;      return {        done: false,        value: value      };    } else {      return {        done: true      };    }  }  return iterator;}var one = new Obj(1);var two = new Obj(2);var three = new Obj(3);one.next = two;two.next = three;for (var i of one) {  console.log(i);}// 1// 2// 3

2、調用 Iterator 接口的場合

(1) 解構賦值

// code2let set = new Set().add('a').add('b').add('c');let [x,y] = set;// x='a'; y='b'let [first, ...rest] = set;// first='a'; rest=['b','c'];

(2) 擴展運算符

// code3// 例一var str = 'hello';[...str] // ['h','e','l','l','o']// 例二let arr = ['b', 'c'];['a', ...arr, 'd']// ['a', 'b', 'c', 'd']            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 恩施市| 富裕县| 镇平县| 长顺县| 沁阳市| 巴中市| 西乌| 兰州市| 乌什县| 闽侯县| 冀州市| 彭州市| 平昌县| 长丰县| 尉氏县| 景谷| 抚松县| 永和县| 郴州市| 浦江县| 长丰县| 商南县| 文安县| 托克逊县| 安新县| 阿克苏市| 凯里市| 郯城县| 莲花县| 长宁区| 雅安市| 日土县| 碌曲县| 康马县| 景德镇市| 霍林郭勒市| 庆阳市| 都兰县| 泰和县| 图们市| 伊宁市|