【ES6基础】Map与WeakMap

2020-01-30  本文已影响0人  第十人i

Map常用方法示例

操作方法 内容描述
map.set(key,value) 添加键值对到映射中
map.get(key) 获取映射中某一个键的对应值
map.delete(key) 将某一键值对移除映射
Map.clear() 清空映射中所有键值对
map.entries() 返回一个以二元数组(键值对)作为元素的数组
map.has(key) 检查映射中是否包含某一键值对
map.keys() 返回一个当前映射中所有键作为元素的可迭代对象
map.values() 返回一个当前映射中所有值作为元素的可迭代对象
map.size 映射中键值对的数量

Map与Object的区别

对比项 映射对象Map Object对象
存储键值对
遍历所有的键值对
检查是否包含指定的键值对
使用字符串作为键
使用Symbol作为键
使用任意对象作为键
可以很方便的得知键值对的数量

WeakMap

let weakmap = new WeakMap();
(function() {
  let o = { n: 1 };
  weakmap.set(o, "A");
})(); // here 'o' key is garbage collected
let s = { m: 1 };
weakmap.set(s, "B");
console.log(weakmap.get(s));
console.log(...weakmap); // exception thrown
weakmap.delete(s);
weakmap.clear(); // Exception, no such function
let weakmap_1 = new WeakMap([
  [{}, 2],
  [{}, 5]
]); //this works
console.log(weakmap_1.size); //undefined”

// --------------分割线--------------
const weakmap = new WeakMap();
let keyObject = { id: 1 };
const valObject = { score: 100 };
weakmap.set(keyObject, valObject);
console.log(weakmap.get(keyObject));
//output { score: 100 }
keyObject = null;
console.log(weakmap.has(keyObject));
//output false

小结

今天的内容就介绍到这里,我们明白了Map是一个键值对的映射对象,相比Object来说可以使用任何键做为键值,并且能够很方便的获取键值对。WeakMap相对于Map是一个不可枚举的对象,必须使用对象作为键值。如何更好的使用Map和WeakMap还需要具体结合我们实际的业务场景进行灵活使用。

上一篇 下一篇

猜你喜欢

热点阅读