for of是用来遍历具有迭代期接口的方法。
    JS中哪些对象里实现了这个接口呢?常见的有ArrayStringarguments,还有后面高级的数据结构,如SetMap等。 怎么给自己的对象添加迭代期接口呢,如下所示:

    1. var a={
    2. list:[1,76,8],
    3. [Symbol.iterator](){
    4. let current=0,that=this;
    5. return {
    6. next(){
    7. return current<that.list.length?{value:that.list[current++],done:false}:{done:true}
    8. }
    9. }
    10. }
    11. }
    12. for(var i of a){console.log(i)}
    13. //打印结果:1 76 8

    他给遍历对象提供了一个接口,可以让你按照预期想的那样去遍历自己的对象。如果遍历一个普通的没有迭代期接口的对象会怎么样呢,如下所示(出错):

    1. var b={name:1,2:3,true:33}
    2. undefined
    3. for(var i of b){console.log(b)}
    4. //报错如下:Uncaught TypeError: b[Symbol.iterator] is not a function

    因为,普通的对象没有实现迭代期接口,你可以遍历那个实现了迭代期接口的类型,正如前面所说到的。