Symbol.iterator
为每一个对象定义了默认的迭代器。该迭代器可以被 for...of
循环使用。
Array
、Map
、Set
、String
都有内置的迭代器,然而有些情况,你可能需要对一个对象进行迭代。这个时候,就可以用Symbol.iterator
来自定义实现一个迭代器。
下面看第一种方式:
let obj = {
0:123,
1:456,
2:789,
length:3,
[Symbol.iterator]:function(){
let index = 0
return {
next(){ //迭代器返回的对象需要有next()方法
return {
value:obj[index++],//value为迭代器生成的值
done:index > obj.length //迭代器的停止条件,done为true停止
}
}
}
}
}
for(var v of obj){
console.log(v)
}
>> 123
>> 456
>> 789
复制代码到F12
控制台,可以看出结果,输出了123、456、789
。
还可以用Generator
函数实现,第二种:
var obj = {
0:123,
1:456,
2:789,
length:3,
[Symbol.iterator]:function*(){
let index = 0
while(index < obj.length){
yield obj[index++]
}
}
}
for(var v of obj){
console.log(v)
}
>> 123
>> 456
>> 789
Generator
函数返回一个生成器,并且它符合可迭代协议和迭代器协议,拥有next()
方法。
复制代码到F12
控制台,可以看出结果,同样也输出了123、456、789
。
对您有帮助的话,欢迎关注!!!
上一篇:vue3在setup的render渲染函数中如何使用slots(插槽)?
下一篇:从零开始的正则表达式教学(一)