我们都知道for…of是es6 新增的遍历数组和字符串的方法,唯有对象不能遍历,由于对象里面的数据比较复杂,不能使用索引取到相应的值,for…of 实现的原理就是调用iterator 接口,现在我们就用自己编写一个遍历对象的接口`
let obj={
start:[1,2,3],
end:[5,6,7],
[Symbol.iterator](){
let self=this;
let index=0;
let arr=self.start.concat(self.end);
let len=arr.length;
return {
next(){
if(index<len){
return{
value:arr[index++],
done:false
}
}else{
return{
value:arr[index++],
done:true
}
}
}
}
}
}
for(let value of obj){
console.log(value)
}
数组es6 已经实现这类的接口,所以可以直接调用iterator 的接口,value代表的是遍历的value值,done为false时代表还有下一步,true代表遍历完成。代码如下:
let arr=[3,4,5]
let Arr=arr[Symbol.iterator]()
console.log(Arr.next())
console.log(Arr.next())
console.log(Arr.next())
console.log(Arr.next())
结果如下: