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的时候,遍历结束。

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...