Iterator迭代器
iterator迭代器
需要自定义遍历数据的时候,用到迭代器
主要供 for...of 消费
任何数据结构只要部署了 iterator 接口,就可以用 for...of 进行遍历操作。
iterator 实际上是对象中的一个属性(方法),名: Symbol.iterator
自带iterator的数据
原生具备 iterator 接口的数据(可用for...of遍历)
- Array
- Arguments
- Set
- Map
- String
- TypedArray
- NodeList
补充知识
例:for(let i of/in 数组/对象){}
/*
for of 遍历数组 i为数组中的元素
for of 遍历对象 报错
for in 遍历数组 i为索引值
for in 遍历对象 i为键名
*/
工作原理
- 创建一个只针对象,指向当前数据结构的起始位置
- 第一次调用对象的next方法,指针自动指向数据结构的第一个成员
- 不断调用next方法,指针一直后移,直到指向最后一个成员
- next方法返回一个包含value和done属性的对象
如果想要for...of能遍历所有对象
// 给Object的原型对象prototype添加方法,方法名:Symbol.iterator
Object.prototype[Symbol.iterator] = function(){
let index = 0 //索引变量
let _this = this //保存当前this
let arr = Object.keys(this) //获取对象中所有属性名
return{ //指针对象
next:function(){
if(index < arr.length){
const result = {
value:_this[arr[index]], // _this[arr[index]]属性值,arr[index]属性名
done:false
}
}else{
return {value: undefined, done: true}
}
}
}
}
// ok现在就可以用for..of遍历对象了
let obj = {
name:'小明',
age:19,
sex:'男'
}
for(let i of obj){
console.log(i)
}
/*
结果:
小明
19
男
*/
本文来自博客园,作者:ycccc丶,转载请注明原文链接:https://www.cnblogs.com/imycc/p/16481099.html