js 的默认对象表达方式{},即一组健对值,但是js对象存在问题就是,对象里的健值必须是字符串,但实际上Number或者其他数据类型作为键也是非常合理的。
为了解决这个问题,在es6中,增加了新的map数据类型结构
Map: 它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现
var map = new Map();
console.log(map.size)
var o = {p:'hello'};
map.set(o,'content');
console.log(map.get(o))
console.log(map.has(o));
map.delete(o);
console.log(map.has(o))

map实例的属性和操作方法:
1.size属性返回 Map 结构的成员总数;
2. set(key, value):set方法设置键名key对应的键值为value,然后返回整个 Map 结构;
3. get(key):get方法读取key对应的键值,如果找不到key,返回undefined;
4.has(key):has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中;
5.delete(key):delete方法删除某个键,返回true。如果删除失败,返回false,
6. clear():clear方法清除所有成员,没有返回值;
map的遍历方法:
keys():返回键名的遍历器。values():返回键值的遍历器。entries():返回所有成员的遍历器。forEach():遍历 Map 的所有成员。
map接受数组作为参数:
var map1 =new Map([
['name','aaa'],['age',21]
])
console.log(map1);
console.log(map1.get('name'))

Set:类似与数组,是一组key的集合,不存储value,成员不能重复,set本身是构造函数,用来生成set数据结构
var set = new Set(); var set1 = new Set([1,2,3])

如果有重复元素,set会自己过滤掉:
var set2 = new Set([3,3,3,4,5]); console.log(set2);

在set中添加key,通过add(key)的方法添加,并且重复加是无效的:
set2.add(6); console.log(set2); set2.add(6); console.log(set2);

使用detele(key)方法删除:
set2.delete(3); console.log(set2);

查看某个值是否为set成员:has(key);
清空所有的set成员:clear(key);
set实例也提供了四种遍历方法:
keys():返回键名的遍历器values():返回键值的遍历器entries():返回键值对的遍历器forEach():使用回调函数遍历每个成员
因为set只有键名(或者说键名和键值是一样的),所以keys()和values()是同样的操作;
因为set结构类似于数组,所以可以通过Array.from()转化为数组;