微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JS Ireratop迭代器/遍历器

一、为什么对象不可以被for……of遍历

      对象的构造函数的原型中,没有Symbol类型的Symbol.iterator方法

let arr = new Array(10, 20, 30, 40)

  console.log(arr)

  console.log(arr) //[40,30,20,10]

  console.log(arr[Symbol.iterator]())

这里数组可以看到是具有Symbol类型的Symbol.iterator方法

 

let obj = {

    1: '我是1',

    2: '我是2',

    3: '我是3',

    [Symbol.iterator]() {

      let index = 1

      return {

        next: () => {

          var value = this[index]

          var done = index > 3

          index++

          return {

            value,

            done,

          }

        },

      }

    },

  }

  console.log(obj)

  for (value of obj) {

    console.log(value) //obj is not iterable

      我是1

      我是2

      我是3

  }

二、

二、Iterator迭代器:可遍历对象的构造函数的原型中的Symbol类型的Symbol.iteator方法被实例化对象调用的返回值。返回值是iterator对象

let ite = arr[Symbol.iterator]()

  console.log(ite)

  console.log(ite.next()) //{value: 40, done: false}

  console.log(ite.next()) //{value: 30, done: false}

  console.log(ite.next()) //{value: 20, done: false}

  console.log(ite.next()) //{value: 10, done: false}

  console.log(ite.next()) //{value: undefined, done: true}

三、for……of遍历的底层原理:

可遍历的对象调用构造函数的原型中的Symbol类型的Symbol.iterator方法返回一个iterator迭代器对象

iterator迭代器对象不断的执行next()方法,返回值也是一个对象拥有value和done属性,value的属性值就是

遍历出的值,done的属性值是布尔类型。直到当done的属性值为true的时候,遍历结束。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐