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()转化为数组;