含义
Map 是 ES6 新增的数据结构,类似对象,区别在于,普通对象的 key 是字符串或数字,而 Map 的 key 可以使任何数据类型
const m = new Map();
const o = {p: 'Hello World'};
m.set(o, 'content')
m.get(o) // "content"
m.has(o) // true
m.delete(o) // true
m.has(o) // false
可以看出 o 被当做一个 key 给其赋值。
作为构造函数 Map 也可以接受一个数组作为参数
const map = new Map([
['name', '张三'],
['title', 'Author']
]);
map.size // 2
map.has('name') // true
map.get('name') // "张三"
map.has('title') // true
map.get('title') // "Author"
上面在创建 map 的时候,指定了两个键 name 和 title。
实际上面执行的是
const items = [
['name', '张三'],
['title', 'Author']
];
const map = new Map();
items.forEach(
([key, value]) => map.set(key, value)
);
读取一个未知的键则会返回 undefined
new Map().get('asfddfsasadf') // undefined
只有对同一个对象的引用,Map 结构才将其视为同一个键。
const map = new Map();
map.set(['a'], 555);
map.get(['a']) // undefined
上面 ['a']表面看一样,但 array 是引用类型,存储的是地址,属于内存中两个地址,次改为
const map = new Map();
const a = ['a'];
map.set(a, 555);
map.get(a) // undefined
如果 Map 的键是一个简单类型的值(数字、字符串、布尔值),则只要两个值严格相等,Map 将其视为一个键,比如0和-0就是一个键,布尔值true和字符串true则是两个不同的键。另外,undefined和null也是两个不同的键。虽然NaN不严格相等于自身,但 Map 将其视为同一个键。
let map = new Map();
map.set(-0, 123);
map.get(+0) // 123
map.set(true, 1);
map.set('true', 2);
map.get(true) // 1
map.set(undefined, 3);
map.set(null, 4);
map.get(undefined) // 3
map.set(NaN, 123);
map.get(NaN) // 123
方法
- size(); // 返回成员总数
- set(key, value);
返回整个 Map 结构,若 key 值存在则键值会被更新,否则生成新的。
- get(key);
读取 key 值,找不到返回 undefined。
- has(key);
返回 布尔值
- delete(key);
删除某个键,删除成功为 true,失败为 false。
- clear();
清空所有的成员,没有返回值。
- keys(); // 键名 key 的集合,是一个数组
- values(); // 键值 value 的集合,是一个数组
- entries(); // 返回所有的成员
const map = new Map([
['F', 'no'],
['T', 'yes'],
]);
for (let item of map.entries()) {
console.log(item[0], item[1]);
}
// "F" "no"
// "T" "yes"
// 或者
for (let [key, value] of map.entries()) {
console.log(key, value);
}
// "F" "no"
// "T" "yes"
-
forEach();