javascript中的迭代器
前言
面试中被问到:
ES6中更新的迭代器有什么用?
提示:文章仅供参考
一、Iterator是什么?
示例:先来看一个最简单的迭代:
for(let i = 0;i<10;i++){
console.log(i)
}
其实迭代器就是帮助数据结构更好的进行遍历的工具。
常见的,当我们遍历一个数据结构时,我们会使用到for循环进行迭代,那为什么js中还需要引入迭代器的概念呢?
1、对js中的Array、Map、Set数据结构更便利地取得数据
2、为for-of 提供支持
二、如何使用
1.那些类型内置了可迭代接口?
1、String
2、Array
3、MaP
4、Set
5、arguments、NodeList等类数组对象
Iterator如何进行迭代?
iterator内置了next方法,next方法返回value和done,value为当前值,done是布尔值,为true时表示没有数据了
所以以上的数据类型我们都可以用for -of进行遍历。
2.使用Symbol.iterator为对象实现可迭代
Symbol是ES6加入的符号类型,Symbol.iterator可以作为对象的一个属性,表示实现了该对象迭代器的方法。
注:对象属性为特殊变量是应填上中括号
class Iterator {
constructor(stop){
this.value = 1;
this.stop = stop;
}
[Symbol.iterator]() { return this; }
next() {
let value = this.value;
if (value < this.stop) {
this.value++;
return {done: false, value: value};
}
return {done: true, value: undefined};
}
}
let myIterator = new Iterator(5)
for (let value of myIterator) {
console.log(value);
}
其实要实现对象可迭代,还不如使用Map映射集合类型,它还会维护键值对顺序。如果不了解Map类型的小伙伴,可以在评论区留言,看到之后我会再简单介绍一下。
总结
提示:其实我们还可以使用生成器隐式的为对象返回成员。在下一篇文章会介绍javascript中的生成器。