SOURCE

'use strict';

//二,9,iterable
//for...of循环遍历集合
var a = [1,2,3];
for(var x of a){
    console.log(x);
}
console.log('你的浏览器支持for...of');

var a = ['A','B','C'];
var s = new Set(['A','B','C']);
var m = new Map([[1,'x'],[2,'y'],[3,'z']]);
for (var x of a){   //遍历Array
    console.log(x);
}
for (var x of s){   //遍历Set
    console.log(x);
}
for (var x of m){
    console.log(x[0] + '=' + x[1]);
}


//for...of循环和for...in循环有什么区别?
//for...in循环,遍历的实际上是对象的属性名称
//我们手动给Array对象添加了额外的属性名后:
var a = ['A','B','C'];
a.name = 'Hello';
for(var x in a){
    console.log(x); //'0','1','2','name'
} //for...in循环把name包括在内

//for...of循环只循环集合本身的元素
var a = ['A','B','C'];
a.name = 'Hello';
for(var x of a){
    console.log(x); //'A','B','C'
}


//更好的方式是直接使用iterable内置的forEach方法
//它接收一个函数,每次迭代就自动回调该函数,以Array为例:
var a = ['A','B','C'];
a.forEach(function(element, index, array){
    //element:指向当前元素的值
    //index: 指向当前索引
    //array: 指向Array对象本身
    console.log(element + ',index = ' + index);
});

//Set没有索引,因此回调函数的前两个参数都是元素本身:
var s = new Set(['A','B','C']);
s.forEach(function(element, sameElement, set){
    console.log(element);
});

//Map的回调函数参数依次为value,key和map 本身:
var m = new Map([[1,'x'],[2,'y'],[3,'z']]);
m.forEach(function(value, key, map){
    console.log( value );
});

//只需要获得Array的element:
var a = ['A','B','C'];
a.forEach(function(element){
    console.log( element );
})
console 命令行工具 X clear

                    
>
console