自定义迭代器
class Counter{
constructor(limit){
this.limit = limit
}
[Symbol.iterator](){
let count=1,
limit = this.limit
return {
next(){
if(count<=limit){
return { done:false,value:count++ }
}else{
return { done:true,value:undefined }
}
}
}
}
}
const counter = new Counter(5)
for(const value of counter){
console.log("value:",value)
}
给对象添加迭代器
Object.prototype[Symbol.iterator] = function(){
let self = this, count =0
let keys = Object.keys(self)
return {
next(){
if(count<keys.length){
let key = keys[count++]
return {done:false,value:[key,self[key]]}
}else{
return { done:true,value:undefined}
}
}
}
}
let obj = {a:1,b:2,c:3,}
for(const [key,value] of obj){
console.log("Obj-key-Value:",key,value)
}
for of循环能通过break,continue,return 或者throw 提前退出