什么是迭代器
迭代器是一种代码组织模式,允许以一次一个的形式提取数据.
ES6 实现的是为迭代器引入一个隐式的标准化接口。JavaScript 很多内建的数据结构现在都提供了实现这个标准的迭代器。
如 数组 map set string等.
应用场景
例如把迭代器附着在一个数据库查询结果上,每次迭代拉出一个新行
for of 的本质
for (var v, res; (res = it.next()) && !res.done; ) {
v = res.value;
console.log( v );
}
迭代器相关
数组也是对象 ,继承于Object数组有内置的 @@iterator,因此 for..of 可以直接应用在数组上 ,Object没有迭代器属性,所以不能直接用for of
用for of, 遍历数组 和使用迭代器的next
let arr = ['a','b','c'];
for(val of arr){
console.log(val) //a b c
}
let it = arr[Symbol.iterator]()
console.log(it.next())
// {value: "a", done: false}
自己实现一个迭代器,使对象具有迭代功能
let person = {
name:'张三',
age:14,
sex:'男',
}
Object.defineProperty(person,Symbol.iterator,{
enumerable:false,
value:function(){
let keys = Object.keys(this);
let len = keys.length;
let idx = 0;
return{
next:()=>{
return{
value:this[keys[idx++]],
done:idx >= len
}
}
}
}
})
let it = person[Symbol.iterator]()
console.log( it.next())
console.log( it.next())
console.log( it.next())
console.log( it.next())
console.log( it.next())
网友评论