Map 是一个键值对的集合,和 Object 类似。 Map 做为构造函数,可以通过全局对象获取到。需要
通过 new 操作创建实例对象,直接调用会报错。 Map 构造函数接收一个 iterable 类型的参数,用来初
始化 Map 。
var m1 = new Map([[1, '1'], ['hello', 'world']]); // Map(2) {1 => "1", "hello" => "world"}
var m2 = Map(); // Uncaught TypeError: Constructor Map requires 'new'
和Object的差异
·Object 的 key 只能是字符串类型和 Symbol 类型, Map 的 key 可以是任意 javascript 类型
·Map 的 key 是有序的,迭代时按照插入 key 的顺序, Object 的 key 是无序的。es6 以后,Object 的 key 也是有序的了
·在频繁增删键值对的场景下, Map 的表现更好, Object 没有做优化
Map对象的属性
size:用来获取 Map 中的条目数量
Map对象的方法
clear:清空对象中的条目
delete:删除特定的条目
get:获取特定的条目
has:检测是否包含特定的条目
set:设置特定的条目,如果已经包含,就更新该条目
迭代Map对象
entries():返回包含 [key, value] 的迭代器
keys():返回包含 key 的迭代器
values():返回包含 value 的迭代器
forEach():传入迭代处理函数,遍历所有条目
for…of 循环:和 entries() 函数的表现类似,循环内部对迭代器做了处理
注意:
迭代 Map 对象的过程中,新增的键值对可以被访问到。已经访问过的键值对,删除后再次添加进
来,会被再次访问。删除没有访问过的键值对,将不会被访问到。
Object和Map性能对比
let obj = {
}
let map = new Map()
let index = 97 + 26
for(let i = 97; i < 97+26; i++){
let key = String.fromCodePoint(i)
//obj加key
obj[key] = i
// map加key
map.set(key,1)
}
console.log(obj,map)
// 对比性能
console.time('obj')
// 测试删除倒数第二个
for(let key in obj)