ES6 数据结构-Map

一、背景知识

  JavaScript的对象(Object)本质上是键值对的集合(Hash结构),但是只能用字符串作为键:

const data = {};
const element = document.getElementById('myDiv');
data[element] = 'metadata';
data['[object HTMLDivElement]']; //"metadata"

  上面代码原意是将一个DOM节点作为对象data的键,但由于对象只接受字符串作为键名,所以element被自动转为字符串[Object HTMLDivElement]。为解决这个问题,ES6引入了Map数据结构。它类似于对象,同样也是键值对的集合,但是“键”的范围不限于字符串,是一种更完整的Hash结构实现。

二、基本语法与特性

2.1 添加键值对

  ①set方法添加键值对:

const m = new Map();
const o = {p:"hello world"};
m.set(o,'GO');
m.get(o);//'GO'

  ②传入二维数组作为键值对:

const map =new Map([
  ['name','tony'],
  ['titile','Author'],
]);
map.size;//2
map.get('name'); //tony
map.get('title');  //Author

  ③传入二维Set:

const set = new Set([
  ['foo',1],
  ['bar',2],
])
const map = new Map(set);
map.get('foo');//1

  事实上,任何具有Iterator接口且每个成员都是一个双元素数组的数据结构都可以当作Map构造函数的参数。

2.2键值覆盖

  如果对同一个键多次赋值,后面的值将会覆盖前面的值。

const map = new Map();
map
.set(1,'aaa');
.set(1,'bbb');
map.get(1);//bbb

  Tips:关于同一个键的定义,内存地址一样才能叫同一个键,比如:

const map = new Map();
map.set(['a'],555);
map.get(['a']);//undefined

三、实例的属性和方法

  属性:Map.prototype.size:返回Map实例的长度
  方法
    ①.set(key,value):添加新键值对,然后返回整个Map结构(若键值已经存在,则可用来更新键值)
    ②.get(key):得到key对应的键值,若找不到key,返回undefined
    ③.has(key):返回一个布尔值,表示Map实例是否含有该键
    ④delete(key):删除某一个键,成功返回true,反之为false
    ⑤clear():消除所有成员,无返回值

你可能感兴趣的:(ES6 数据结构-Map)