1、实例属性和操作方法
    1)size属性
      const map = new Map();
      map.set(‘foo‘, true);
      map.set(‘bar‘, false);
      console.log(map.size);
    2)set(key, value)
    3)get(key)  如果找不到key,返回undefined
    4)has(key)
    5)delete(key)
    6)clear() 清除所有成员
    2、遍历方法
      -keys():返回键名的遍历器。
      -values():返回键值的遍历器。
      -entries():返回所有成员的遍历器。
      -forEach():遍历Map的所有成员。
      注意:Map的遍历顺序就是插入顺序
      const map = new Map([
          [‘F‘, ‘no‘],
          [‘T‘, ‘yes‘],
      ])
      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);
      }
      for(let [key, value] of map) {
          console.log([key, value]);
      }
    Map()结构转换为数组 用扩展运算符
      const map1 = new Map([
          [1, ‘one‘],
          [2, ‘two‘],
          [3, ‘three‘]
      ]);
      console.log([...map1.keys()]);
      console.log([...map1.values()]);
      console.log([...map1.entries()]);
      console.log([...map1]);
结合数组的map方法、filter方法,可以实现 Map 的遍历和过滤(Map 本身没有map和filter方法)
      const map0 = new Map()
          .set(1, ‘a‘)
          .set(2, ‘b‘)
          .set(3, ‘c‘);
      const map4 = new Map(
          [...map0].filter(([k, v]) => k < 3)
      )
      console.log([...map4]);
      const map5 = new Map(
          [...map0].map(([k, v]) => [k * 2, ‘_‘ + v]
      )
      console.log([...map5]);
      map0.forEach(function(value, key, map) {
          console.log("key: %s, Value: %s", key, value);
      })
      const reporter = {
          report: function(key, value) {
              console.log("Key: %s, Value: %s", key, value);
          }
      }
      map.forEach(function(value, key, map){
          this.report(key, value);
      }, reporter) ;
    3、与其他数据的互相转换
    1)Map转化为数组
      const myMap = new Map()
              .set(true, 7)
              .set({foo: 3}, [‘abc‘]);
      console.log([...myMap]);
    2)数组转化为Map
      new Map([
          [true, 7],
          [{foo: 3}, [‘abc‘]]
      ])
    3)Map转化为对象
      function strMapToObj(strMap) {
          let obj = Object.create(null);
          for(let [k, v] of strMap) {
              obj[k] = v;
          }
          return obj;
      }
      const myMap1 = new Map()
          .set(‘yes‘, true)
          .set(‘no‘, false);
      console.log(strMapToObj(myMap1))
    4)对象转化为Map
      function objToStrMap(obj) {
          let strMap = new Map();
          for(let k of Object.keys(obj)) {
              strMap.set(k, obj[k]);
          };
          return strMap;
      }
      console.log(objToStrMap({yes: true, no: false}))
    5)map转化为JSON
    Map 转为 JSON 要区分两种情况。一种情况是,Map 
    的键名都是字符串,这时可以选择转为对象 JSON。
      function strMapToJson(strMap) {
          return JSON.stringify(strMapToObj(strMap));
      }
      let myMap2 = new Map().set(‘yes‘, true).set(‘no‘, false);
      console.log(strMapToJson(myMap2));
    另一种情况是,Map 的键名有非字符串,这时可以选择转为数组 JSON。
      function mapToArrayJson(map) {
          return JSON.stringify([...map]);
      }
      let myMap3 = new Map().set(true, 7).set({foo: 3}, [‘abc‘]);
      console.log(mapToArrayJson(myMap3))
    6)JSON转化为Map
    JSON 转为 Map,正常情况下,所有键名都是字符串。
      function jsonToStrMap(jsonStr) {
          return objToStrMap(JSON.parse(jsonStr));
      }
      console.log(jsonToStrMap(‘{"yes": true, "no": false}‘));
    但是,有一种特殊情况,整个 JSON 就是一个数组,且每个数组成员本身,又是一个有两个成员的数组。这时,它可以一一对应地转为 Map。这往往是 Map 转为数组 JSON 的逆操作。
      function jsonToMap(jsonStr) {
          return new Map(JSON.parse(jsonStr));
      }
      console.log(jsonToMap(‘[[true,7],[{"foo":3},["abc"]]]‘))
