搜索文档
介绍
迭代器 iterator 是一种接口(对象的一个属性),为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作。
iterator 接口就是对象的一个属性,属性名
Symbol.iterator属性值是一个函数。有了该属性就可以使用 for……of 遍历。ES6 创造了一种新的遍历命令 for……of 循环,Iterator 接口主要供 for……of 消费
原生具备 iterator 接口的数据(可用 for of 遍历)
- Array
- Arguments
- Set
- Map
- String
- TypeArray
- NodeList
演示 for……of
jslet arr = ['梅西','苏亚雷斯','内马尔']; for(let item of arr) { console.log(item); }
工作原理
- 创建一个指针对象,指向当前数据结构的起始位置。
- 第一次调用对象的 next 方法,指针自动指向数据结构的第一个成员。
- 接下来不断调用 next 方法,指针一直往后移动,直到指向最后一个成员。
- 每调用 next 方法返回一个包含 value 和 done 属性的对象。
自定义可迭代数据
js
let aggre = {
title: '集合',
items: [
'Messi','Suarez','Neymar'
],
[Symbol.iterator](){
let index = 0;
return {
next:() => {
if (index < this.items.length) {
let res = { value: this.items[index],done: false };
index++;
return res;
}
return { value: undefined,done: true };
}
}
}
}
for(let item of aggre) {
console.log(item);
}
