美文网首页
es6解读6- Iterator 和 for...of 循环

es6解读6- Iterator 和 for...of 循环

作者: HowlEagle101Div | 来源:发表于2017-10-27 15:47 被阅读0次

什么是Iterator接口

  • ES6中内置了一些Symbol,其中最重要的一个恐怕就是Symbol.iterator了,相当于迭代器的接口,只有对象里有这个symbol的属性,才可以认为此对象是可迭代的。
  • 我们先看一下规范中对这个symbol的描述:
    A method that returns the default Iterator for an object. Called by the semantics of the for-of statement.
  • js中哪些对象里实现了这个接口呢?常见的有Array,String,arguments,还有后面高级的数据结构,如Set,Map等。

Iterator的基本用法

for...of

  • for...of循环的过程,其实就是通过不断调用Iterator接口来达到这种形式;
  • 也就是说,不同的数据结构,通过for...of这种统一的形式,来达到读取不同数据结构的目标;但是背后的Iterator接口其实不同;

数组自动帮我们带了iterator接口

let arr=['hello','world'];
let map=arr[Symbol.iterator]();
console.log(map.next());
console.log(map.next());
console.log(map.next());

Object {value: "hello", done: false};done代表,是否做完了所有操作,true:代表是; false:代表无,还有其他操作;

Object对象不是一个iterator,那么如何把它变成一个iterator呢?

let obj={
   start:[1,3,2],
    end:[7,8,9],
    [Symbol.iterator](){
        let self=this;
        let index=0;
        let arr=self.start.concat(self.end);
        let len=arr.length;
        return {
            next (){
                if(index<len){
                    return {
                        value:arr[index++],
                        done:false
                    }
                }else{
                    return {
                        value:arr[index++],
                        done:true
                    }

                }
            }
        }
    }
}
for(let key of obj){
    console.log(key);
}

let...of的使用

let arr=['hello','world'];
for(let value of arr){
   console.log(value);
}

相关文章

网友评论

      本文标题:es6解读6- Iterator 和 for...of 循环

      本文链接:https://www.haomeiwen.com/subject/zfxdpxtx.html