ES6-迭代器介绍
是一种接口,为各种不同数据结构提供统一的访问机制,任何数据只要部署了iterator接口(在JS中指的是:对象中的一个属性)均可完成遍历操作。
1、ES6创建了一种新的遍历命令for…of循环,iterator接口主要提供for…of消费
2、原生具备iterator接口的数据(可用for…of遍历)包括:
1、Array
// 声明一个数组
const xiyou=['唐僧','孙悟空','猪八戒','沙僧'];
// 使用for of进行遍历
for (const v of xiyou) {
console.log(v);
//结果: 唐僧
孙悟空
猪八戒
沙僧
}
console.log(xiyou);
//结果:(4) ['唐僧', '孙悟空', '猪八戒', '沙僧']
2、Arguements
3、Set
4、Map
5、String
6、TypedArray
7、NodeList
3、工作原理
1、创建一个指针对象,指向当前数据结构的起始位置
2、第一次调用对象的next方法,指针自动指向数据结构的第一个成员
3、随后不断调用next方法,指针持续后移,直至指向最后一个成员
4、每次调用next方法返回一个包含value和done属性的对象
const xiyou=['唐僧','孙悟空','猪八戒','沙僧'];
console.log('iterator', iterator)
//结果:iterator Array Iterator {}
// 原理演示
let iterator=xiyouSymbol.iterator;
// 调用对象的next方法
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
//结果:{value: '唐僧', done: false}
{value: '孙悟空', done: false}
{value: '猪八戒', done: false}
{value: '沙僧', done: false}
{value: undefined, done: true}
注: 需进行自定义遍历数据时,要想到迭代器
ES6-迭代器(iterator)应用
自定义遍历数据
// 声明一个对象
const clases = {
name: "终极一班",
stus: ["小明", "小丽", "小甜", "Sam"],
// 索引变量
let index=0;
return {
next: ()=>{
if (index<this.stus.length) {
let result= {value:this.stus[index],done:false};
// 下标自增
index++;
// 返回结果
return result
} else {
return{value:undefined,done:true}
}
},
};
},
};
// 使用for of遍历对象
for (let v of clases) {
console.log(v);
}
// 结果:小明 小丽 小甜 Sam