如何判断一个对象是否有部署Iterator接口

首先 Iterator(遍历器) 是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。

那怎么判断一个对象是否有部署Iterator接口?

答案是看这个对象有没有 Symbol.iterator 方法,Symbol.iterator属性本身是一个函数,就是当前数据结构默认的遍历器生成函数。执行这个函数,就会返回一个遍历器。至于属性名Symbol.iterator,它是一个表达式,返回Symbol对象的iterator属性,这是一个预定义好的、类型为 Symbol 的特殊值,所以要放在方括号内

  let aa = []
  console.log(typeof aa[Symbol.iterator]) // function

原生具备 Iterator 接口的数据结构如下:

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