JAVASCRIPT面试题:Iterator是什么,有什么作用?

2020-07-1509:29:30WEB前端开发Comments2,874 views字数 1054阅读模式

Iterator是理解第24条的先决知识,也许是我IQ不够?,Iterator和Generator看了很多遍还是一知半解,即使当时理解了,过一阵又忘得一干二净。。。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/19736.html

Iterator(迭代器)是一种接口,也可以说是一种规范。为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/19736.html

Iterator语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/19736.html

const obj = {
    [Symbol.iterator]:function(){}
}

复制代码

[Symbol.iterator]属性名是固定的写法,只要拥有了该属性的对象,就能够用迭代器的方式进行遍历。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/19736.html

迭代器的遍历方法是首先获得一个迭代器的指针,初始时该指针指向第一条数据之前,接着通过调用 next 方法,改变指针的指向,让其指向下一条数据 每一次的 next 都会返回一个对象,该对象有两个属性文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/19736.html

  • value 代表想要获取的数据
  • done 布尔值,false表示当前指针指向的数据有值,true表示遍历已经结束

Iterator 的作用有三个:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/19736.html

  1. 为各种数据结构,提供一个统一的、简便的访问接口;
  2. 使得数据结构的成员能够按某种次序排列;
  3. ES6 创造了一种新的遍历命令for…of循环,Iterator 接口主要供for…of消费。

遍历过程:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/19736.html

  1. 创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。
  2. 第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。
  3. 第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。
  4. 不断调用指针对象的next方法,直到它指向数据结构的结束位置。

每一次调用next方法,都会返回数据结构的当前成员的信息。具体来说,就是返回一个包含value和done两个属性的对象。其中,value属性是当前成员的值,done属性是一个布尔值,表示遍历是否结束。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/19736.html

let arr = [{num:1},2,3]
let it = arr[Symbol.iterator]() // 获取数组中的迭代器
console.log(it.next()) 	// { value: Object { num: 1 }, done: false }
console.log(it.next()) 	// { value: 2, done: false }
console.log(it.next()) 	// { value: 3, done: false }
console.log(it.next()) 	// { value: undefined, done: true }

作者:Jake Zhang文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/19736.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/gcs/19736.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定