for of是用来遍历具有迭代期接口的方法。
JS中哪些对象里实现了这个接口呢?常见的有Array,String,arguments,还有后面高级的数据结构,如Set,Map等。
怎么给自己的对象添加迭代期接口呢,如下所示:
var a={
list:[1,76,8],
[Symbol.iterator](){
let current=0,that=this;
return {
next(){
return current<that.list.length?{value:that.list[current++],done:false}:{done:true}
}
}
}
}
for(var i of a){console.log(i)}
//打印结果:1 76 8
他给遍历对象提供了一个接口,可以让你按照预期想的那样去遍历自己的对象。如果遍历一个普通的没有迭代期接口的对象会怎么样呢,如下所示(出错):
var b={name:1,2:3,true:33}
undefined
for(var i of b){console.log(b)}
//报错如下:Uncaught TypeError: b[Symbol.iterator] is not a function
因为,普通的对象没有实现迭代期接口,你可以遍历那个实现了迭代期接口的类型,正如前面所说到的。