一、迭代器介绍
迭代器(iterator)是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署iterator接口,就可以完成遍历操作。
- ES6创造了一种新的遍历命令for...of循环,iterator接口主要供for...of使用
原生具备iterator接口的数据(可用for of遍历)
- Array
- Arrguments
- Set
- Map
- String
- TypedArray
- NodeList
- 原理
(1) 创建一个指针对象,指向当前数据结构的起始位置
(2) 第一次调用对象的next方法,指针自动指向数据结构的第一个成员
(3) 接下来不断调用next方法,指针一直往后移动,直到指向最后一个成员
(4) 每调用next方法返回一个包含value和done属性的对象
二、简单实现
const rng = ['letme', 'mlxg', 'xiaohu', 'uzi', 'ming'];
let iterator = rng[Symbol.iterator]();
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
三、实例
// 声明一个对象
const newRng = {
name: "皇族",
member: [
'letme',
'mlxg',
'uzi',
'ming',
],
[Symbol.iterator]() {
let index = 0
let that = this;
return {
next: function () {
if (index < that.member.length) {
const result = {
value: that.member[index],
done: false
}
index++;
return result
} else {
return {
value: undefined,
done: true
}
}
}
}
}
}
// 遍历此对象
for (let v of newRng) {
console.log(v);
}
// 结果
// letme
// mlxg
// uzi
// ming
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。