一、为什么会产生Map数据结构?
Javascript对象(Objdect)本质上是键值对的集合(Hash结构),但是只能用字符串作为健。为了解决这个问题,ES6提供了Map数据结构,它类似于对象,也是键值对的集合,但是键的范围不限于字符串,各种类型的值都可以当作键。Object提供了“字符串——值”的对应,Map结构提供了“值——值”的对应,是一种完善的Hash结构实现。
二、基本用法。
1、Map可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。实际上,任何具有Iterator接口且每个成员都是一个双元素数组的数据结构都可以当作Map构造函数的参数。
const map = new Map([
['name','张三'],
['title','Author']
]);
console.log(map.size); //2
console.log(map.has('name')); //true
console.log(map.get('name')); //张三
console.log(map.has('title')); //true
console.log(map.get('title')); //Author
//Map接受数组作为参数,实际上执行的是如下算法:
const items = [
['name','张三'],
['title','Author']
];
const map = new Mp();
items.forEach(
([key,value]) => map.set(key,value)
);
2、Set和Map都可以用来生成新的Map。
const set = new Set([
['foo',1],
['bar',2]
]);
const m1 = new Map(set);
console.log(m1.get('foo'));
const m2 = new Map([['baz',3]]);
const m3 = new Map(m2);
console.log(m3.get('baz'));
3、如果对同一个键多次使用,后面的值将覆盖前面的值。如果读取了未知的值,将返回undefined。
const map = new Map();
map.set(1,'aaa').set(1,'bbb');
console.log(map.get(1)); //bbb
console.log(map.get(a)); //undefined
4、只有对同一个对象的引用,Map结构才将其视为同一个键。
const map = new Map();
map.set(['