Map和Set 是 ES6 中新增的一种数据结构。Map为类似于Object的键值对结构,Set为成员唯一的类数组结构。以Map为例介绍两种数据结构的遍历方法。for...of

var map = new Map([ ['age', 19], ['height', 180] ]);

或使用set()函数:var map = new Map();
map.set('age',19).set('height',180);
 
var set = new Set( [1, 2, 3, 4, 2, 1] ); //接收一个数组作为初始化
[...set] //[1,2,3,4]
或使用add()函数: var set = new Set();
set.add(1).add(2);
 
//由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以keys方法和values方法的行为完全一致。
for (let key of map.keys()) { console.log(key); } 
for (let value of map.values()) { console.log(value); } for (let item of map.entries()) { console.log(`${ item[0] }: ${ item[1] }`); }
map.forEach((key, value, map) => {
  console.log(`${ key }: ${ value }`);
});

// forEach 的第二个参数用来绑定this绑定 this
var reporter = {
  report(key, value) {
    console.log(`${ key }: ${ value } by reporter object.`);
  }
}
map.forEach(function (key, value) {// 使用箭头函数会导致这个 this 是 undefined 
this.report(key, value);
}, reporter)
//Set 结构没有以下方法
for (let [key, value] of map.entries()) {
  console.log(`${ key }: ${ value }`);       
}

for (let [key, value] of map) {                
  console.log(`${ key }: ${ value }`);
}

数据结构间的相互转化:
Map->数组 [...map]
数组->Map new Map([1,2])
Map->object:

  for ( let [ key, value ] of map.entries() ){
    obj[key] = value;
  }

Object->Map:

  let map1 = new Map();
  for ( let item in a ){
    map1.set( item,a[item] )
  }