es6里面的Map的基本用法
为什么要新出来个Map呢?
我们知道,Js对象在本质上是就键值对的集合,比如一个普通的json对象就是键值对的集合。在es6之前的js对象有个缺点,就是它只能使用字符串充当键。ES6正是为了解决key只能为字符串才提供了Map结构。它类似与对象,也是键值对集合,但是”键”的范围不限于字符串,言外之意就是说对象也可以当作键,比如下面的代码(如果嫌node麻烦的话,新建个html,直接在谷歌浏览器中打开即可,现在最新版本的谷歌是支持set和map的):
<script>
var m = new Map();
var obj = {greet: "你好"};
m.set(obj, "greet world");
console.log( m.get(obj) );
</script>
执行结果,
可以看到,在es6的map中,使用对象作为key是没有问题的。
Map这种数据结构还可接收一个数组进行初始化:
<script>
var map = new Map([["name", "小明"], ["age", "22"]]);
console.log(map.size);
console.log(map.has("name"));
console.log(map.get("name"));
</script>
执行结果:
注意,不能写成new Map([{"name", "小明"}, {"age", "22"}]);哦。另外,在使用对象作为key时,要小心下面的情况。
<script>
var map = new Map();
map.set(['a'], "zhao");
map.get(['a']); // 结果为空
</script>
因为,两次写的['a']的地址并不同,是不同的变量,我们作为key的对象其实是用对象的地址作为key的。地址不同,则在map中视为两个不同的键。
Map结构有以下属性和方法:
- size : 返回成员总数。
- set(key, value) : 设置一个键值对。
- get(key) : 读取一个键。
- has(key) : 返回一个布尔值,表示某个键是否在Map结构中。
- delete(key) : 删除某个键。
- clear() : 清除所有成员。