1、Map结构 的目的 && 基本用法
Map对象 与 Object对象
区别主要在于:
Object 的key只能是字符串
Map对象 的key可以解析这个字符串所对应的变量、对象等
// 的key只能是字符串
var data = {};
var element = document.getElementById('myDiv');
data[element] = 'metadata';
data['[object HTMLDivElement]'] // "metadata"
// 这个key是对象o
var m = new Map();
var o = {
p: 'Hello World'
};
m.set(o, 'content')
m.get(o) // "content"
m.has(o) // true
m.delete(o) // true
m.has(o) // false
上面代码使用set方法, 将对象o当作m的一个键, 然后又使用get方法读取这个键, 接着使用delete方法删除了这个键。
作为构造函数, Map 也可以接受一个数组作为参数。 该数组的成员是一个个表示键值对的数组。
2、Map的定义 && 常用的使用方法
//使用方法
ps1:
var m = new Map();
var o = {
p: 'Hello World'
};
m.set(o, 'content') // 设置值
m.get(o) // 查询值 'content'
m.has(o) // 查询是否存在 true
m.delete(o) // 删除值 true
m.has(o) // 查询是否存在 fales
ps2:
var map = new Map([
['name', ' 张三 '],
['title', 'Author']
]);
map.size // 查询长度 2
map.has('name') // true
map.get('name') // " 张三 "
map.has('title') // true
map.get('title') // "Author"
3、Map的注意事项
1. 字符串true和布尔值true是两个不同的键。
2.如果对同一个键多次赋值, 后面的值将覆盖前面的值。
3.读取一个未知的键, 则返回undefined。
4.只有对同一个对象的引用, Map 结构才将其视为同一个键。 这一点要非常小心。
var map = new Map();
map.set(['a'], 555);
map.get(['a']) // undefined
// 内存地址是不一样的, 因此get方法无法读取该键, 返回undefined。
// 同理, 同样的值的两个实例, 在 Map 结构中被视为两个键。