欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

详解可迭代对象是什么

最编程 2024-01-13 20:57:41
...

遍历器(Iterator)它是一种借口,为各种不同的数据结构提供统一的访问机制。 任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。
它的作用有三个:
一是为各种数据结构,提供一个统一的、简便的访问接口;
二是使得数据接口的成员能够按照某种次序排列;
三是ES6创造了一种新的遍历命令for...of循环,Iterator接口主要提供for...of消费

遍历过程,创建一个指针对象,调用指针的next方法,每调用依次next方法,就会返回valuedone两个属性对象,value属性是当前成员的值,done属性是一个布尔值,表示循环可以结束

var it = makeIterator(['a','b']);
console.log(it.next());
console.log(it.next());
console.log(it.next());

function makeIterator(array){
  var nextIndex = 0;
  return {
    next: function(){
      return nextIndex < array.length ?
        { value: array[nextIndex++],done: false }:
        {value:undefined,done: true}
    }
  }
}

具有原生Iterator接口的数据结构

Array
Map
Set
String
TypedArray
函数的 arguments 对象
NodeList 对象

凡是部署了Symbol.iterator属性,都称之为部署了遍历器接口,返回一个遍历器对象;对于原生部署了Iterator接口,for...of会自动去遍历,如果没有的话(比如对象),都需要自己在Symbol.iterator属性上面部署

总结: 一个数据结构(数组、Map、Set,某些类似数组的对象——比如arguments对象,DOM NodeList对象,Generator对象,字符串等),才可以被for...of循环遍历。 换句话说就是for...of 循环内部调用的是数据结构Symbol.iterator方法

[更多请参考参考阮一峰](http://es6.ruanyifeng.com/#docs/iterator

推荐阅读