Object 和 Map 的区别
同
- 存取值
- 删键
- 检查是否存在
Map 的优势
- Maps 的
key
可以是任意值,包括函数、对象、基本类型,而 Object 的key
只能是字符串
和Symbols
- Map 值键值是有序的(按插入的顺序),而对象则没有
- Map 拥有
size
属性直接获取key
个数,而 Object 只能间接计算 - Map 可以直接迭代,而 Object 需要先转化成数组
- Map 在涉及频繁增删键值对的场景下会有些性能优势
map 相关操作
生成一个 map
var map = new Map();
map.set('a',1);
map.set('b',2);
map 的大小
map.size(2)
map 的遍历
for (var kv of map) {
console.log(kv); // ["a", 1], ["b", 2]
}
map.forEach((val,kay)=>console.log(val, key)) // 1 a, 2 b
Weakmap
weakMap 与 map 又稍有不同:
- 只能用 Object 为 key
- 不能遍历
- 当 key 的引用丢失时,weakMap 对应的 key 为被回收,不会造成内存泄露
最后一点写个例子
var weakmap = new WeakMap();
var a = {};
weakmap.set(a, 1);
a = null;
此时 weakmap 里的 a 对应的值将会被垃圾回收