详解JavaScript中的Map和WeakMap
作者:编程三昧
Map和WeakMap都是ES6中新增的数据结构,它们的主要区别在于键的作用域和键的类型,本文就通过代码示例给大家详细介绍了JavaScript键的作用域和类型,需要的朋友可以参考下
键的作用域
Map 的键的作用域是全局的,也就是说,Map 中的键不会被污染,也不会对其他的变量产生影响。而 WeakMap 的键的作用域是局部的,也就是说,WeakMap 中的键只在定义它的函数作用域内有效,一旦函数执行完毕,WeakMap 中的键就会被释放。
键的类型
Map 的键可以是任意类型的值,包括对象、数组、函数等等。而 WeakMap 的键只能是对象,因为 WeakMap 是通过引用计数来管理键的,如果键不是对象,就无法计数。
下面是一个使用 Map 和 WeakMap 的示例代码:
// 使用 Map 存储数据 const map = new Map(); map.set("a", 1); map.set("b", 2); map.set("c", 3); // 使用 WeakMap 存储数据 const weakMap = new WeakMap(); const obj1 = {}; const obj2 = {}; weakMap.set(obj1, 1); weakMap.set(obj2, 2); weakMap.set(obj1, 3); console.log(map.get("a")); // 1 console.log(map.get("b")); // 2 console.log(map.get("c")); // 3 console.log(weakMap.get(obj1)); // 3 console.log(weakMap.get(obj2)); // 2
键的可枚举性
与Map
对象不同的是,WeakMap
的键是不可枚举的。不提供列出其键的方法。列表是否存在取决于垃圾回收器的状态,是不可预知的。
总结
如果有需要遍历键值对的需求,则需要使用 Map。
到此这篇关于详解JavaScript中的Map和WeakMap的文章就介绍到这了,更多相关JavaScript Map和WeakMap内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!