详解JavaScript中的Map和WeakMap
键的作用域
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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
这篇文章主要介绍了JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求 的相关资料,需要的朋友可以参考下2017-10-10JavaScript Cookie显示用户上次访问的时间和次数
用cookies记录用户的访问时间与次数,然后再次访问时,在读取。2009-12-12JavaScript中valueOf函数与toString方法深入理解
基本上,所有JS数据类型都拥有valueOf和toString这两个方法,null除外。它们俩解决javascript值运算与显示的问题,本文将详细介绍,有需要的朋友可以参考下2012-12-12
最新评论