map是ES提供的一种字典数据结构。

字典结构——用来存储不重复key的hash结构。不同于集合(set)的是,字典使用的是键值对的形式来存储数据

JavaScript对象(object:{})只能用字符串来当key,这对使用带来了不便
为了解决这个问题,ES6提供了map数据结构。其类似于对象,也是键值对的集合,但“key”的范围不仅限于字符串,而是各种类型的值都可以当做key。也就是说,object提供了“字符串-值”的对应结构,map则提供的是“值-值”的对应。是一种更加完善的hash结构

对象对map结构的支持演示
var data1={a:1},
      data2={b:2},
      obj={};
      //为obj对象添加属性(将data1和data2作为属性名)
      obj[data1]=1;
      obj[data2]=2;
      console.log(obj);
可以看到结果并非我们需要的

创建一个map
const map=new Map([
     ['a',1],
     ['b',2]
]);
console.log(map);
上面的['a',1]代表,将a作为key,1作为value声明
那么是否['a',1]中能写入第三个元素呢?答案是可以的,但是!ES6不会理你

map类的属性——size     用于获取map的长度
console.log(map.size);
map类的方法——set   Map.set(key,value)  设置键名key对应的键值为value,然后返回整个map结构。如果key已经有值,则键值会被更新,否则生成新的键 
console.log(map.set([1,2,3],'3元素的数组'));
//也可以链式添加
map.set('name','张三').set('age',28);
console.log(map);
map类的方法——get  Map.get(key)    读取key对应的键值,如果获取不到则返回undefined
console.log(map.get('name'));
获取数组对应的键值——后续补充
map类的方法——delete   Map.delete(key)     删除某个键,如果删除成功返回true,否则返回false
console.log(map.delete('name'));
map类的方法——has      Map.has(key)        判断某个键是否存在于map中,返回布尔值
console.log(map.has('age'));
map类的方法——clear    Map.clear()         清除所有数据,没有返回值
map.clear();
map类的方法——keys     Map.keys()          返回键名的遍历器
console.log(map.keys());
map类的方法——values   Map.values()        返回键值的遍历器
console.log(map.values());
map类的方法——entries  Map.entries()       返回键值对的遍历器
console.log(map.entries());
map类的方法——forEach  map.forEach(function(){})   使用回调遍历每一个成员
map.forEach(function (value, key, map) {
      console.log(`这是key:${key},这是value:${value},这是map本身:${map}`);
})
Map在使用过程中需要注意的地方
1.在js中NaN是不等于自身的一种数据类型,但是在map中,多次set以NaN为key的数据的时候,会产生覆盖的行为。说明map会将NaN视为同一个键
map.set(NaN,1).set(NaN,10);
console.log(map);
2.如果map数据中以空对象作为key({})的话,会发现,出现了两个key,这是因为每一个{}都是全新的引用,其不同的是内存地址。而反观上面的NaN,其地址只有一个,所以才会出现覆盖的情况
map.set({},1).set({},2);
console.log(map);

 















 posted on 2018-04-11 20:03  谢某某  阅读(25602)  评论(0编辑  收藏  举报