ES6-Symbol.iterator 迭代器

一个数据结构只要部署了Symbol.iterator属性就能使用 for...of遍历...运算符 操作

 

Object身上没有Symbol.iterator,当直接使用时会报错

 

        let obj = {
            0: 'a',
            1: 'b',
            2: 'c',
        }
        
        console.log([...obj])//报错obj is not iterable 
     在没有Symbol.iterator方法下运行

 

let obj = {
            0: 'a',
            1: 'b',
            2: 'c',
        }
        
    for(let p of obj){
            console.log(p);//TypeError: obj is not iterable
      }

  

 

 

Array身上天生具备Symbol.iterator

        let arr = [1,2,3,4];

        console.log([...arr]);//(4) [1, 2, 3, 4]
        数组,天生具备Symbol.iterator方法所以可以使用

 

 

而我们Object需要用到...运算符for of遍历怎么办呢

如果我们要使用它的话,Object身上需要有一个Symbol.iterator属性代码如下:

  let obj = {
            0: 'a',
            1: 'b',
            2: 'c',
            length: 3,
            [Symbol.iterator]: function () {
                // index用来记遍历圈数
                let index = 0;
                let next = () => {
                    return {
                        value: this[index],
                        done: this.length == ++index
                    }
                }
                return {
                    next
                }
            }
        }

        // console.log(obj.length)
        console.log([...obj]);//(2) ["a", "b"]

        for(let p of obj){
            console.log(p) //"a"  "b"
        }

  

 

posted @ 2019-05-05 02:59  set_Promise  阅读(5458)  评论(3编辑  收藏  举报