迭代器
迭代器就是一种机制。它是一种接口,为各种不同的数据解构提供统一的访问机制。任何数据结构只要部署Iteratior接口,就可以完成遍历操作
Iteractor的作用有三个:
一、是为各种数据结构,提供一个统一的、简便的访问接口
二、使得数据结构得成员能够按某种次序排列
三、Iterator接口主要供for...of消费
遍历过程:
1.创建一个指针对象,指向当前数据结构的起始位置。
2.第一次调用指针对象的next方法,指针就指向数据结构的第一个成员。
3.第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。
4.不断调用指针对象的next方法,知道它指向数据结构的结束位置。
每一次调用next
方法,都会返回数据结构的当前成员的信息。具体来说,就是返回一个包含value
和done
两个属性的对象。其中,value
属性是当前成员的值,done
属性是一个布尔值,表示遍历是否结束
例如:
let arr = [1, 2, 3, 'hello', '你好']
let diedai = arr.keys()
console.log(diedai.next());//{ value: 0, done: false }
console.log(diedai.next());//{ value: 1, done: false }
console.log(diedai.next());//{ value: 2, done: false }
console.log(diedai.next());//{ value: 3, done: false }
console.log(diedai.next());//{ value: 4, done: false }
console.log(diedai.next());//{ value: undefined, done: true }
原生具有Iterator接口的数据结构:
Array、Map、Set、String、TypedArray、arguments、NodeList
for..in和 for..of的区别:
for(let k in str) ----k拿到的是数组下标
for(let k of str) ----k拿到的是值注意:普通对象使用for...of会报错