JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。
ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。
作为构造函数,Map 也可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。
不仅仅是数组,任何具有 Iterator 接口(可遍历)、且每个成员都是一个双元素的数组的数据结构 都可以当作Map构造函数的参数。这就是说,Set和Map都可以用来生成新的 Map
Map多次赋值 后一次的值覆盖前一次的值。如果读取一个未知的键,则返回undefined。
Map的实例属性和操作方法:
1.size属性 (返回Map结构下成员总个数)
2.set(key,value) set方法设置键名key对应的键值为value,然后返回整个 Map 结构。如果key已经有值,则键值会被更新,否则就新生成该键。
3.get(key) get方法读取key对应的键值,如果找不到key,返回undefined。
4.has(key) has方法返回一个布尔值(有就是true 没有就是false),表示某个键是否在当前 Map 对象之中 。
5.delete(key) delete方法删除某个键,返回true。如果删除失败,返回false。
6.clear() clear方法清除所有成员,,没有返回值 这个就不写例子了。
Map的遍历方法:
注意的是,Map的遍历顺序就是插入顺序
Map 结构转为数组结构,比较快速的方法是使用扩展运算符(...)。
数组转化为Map,直接将数组带入Map即可。
Map可以无损的转换对象。
Map转换JSON 分两种情况:
一种情况是,Map 的键名都是字符串,这时可以选择转为对象 JSON(先把Map转成对象再转JSON);
第二种情况,Map 的键名有非字符串,这时可以选择转为数组 JSON(先把Map转成数组再转JSON);