javascript - ES6 Map 和 WeakMap 有什么区别?

标签 javascript ecmascript-6 ecmascript-harmony weakmap

寻找 thisthis MDN 页面,似乎 Maps 和 WeakMaps 之间的唯一区别是 WeakMaps 缺少“大小”属性。但这是真的吗?它们有什么区别?

最佳答案

当它们的键/值引用的对象被删除时,它们的行为不同。让我们看下面的示例代码:

var map = new Map();
var weakmap = new WeakMap();

(function(){
    var a = {x: 12};
    var b = {y: 12};

    map.set(a, 1);
    weakmap.set(b, 2);
})()

上面的 IIFE 已执行,我们无法再引用 {x: 12}{y: 12}。垃圾收集器继续从“WeakMap”中删除键 b 指针,并从内存中删除 {y: 12}。但是在“Map”的情况下,垃圾收集器不会从“Map”中删除指针,也不会从内存中删除{x: 12}

总结:WeakMap 允许垃圾收集器完成它的任务而不是 Map。

引用文献:http://qnimate.com/difference-between-map-and-weakmap-in-javascript/

关于javascript - ES6 Map 和 WeakMap 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15604168/

相关文章:

javascript - 为什么我计算每月汽车付款的功能不起作用?

javascript - 推迟 JavaScript 执行,直到内容添加到文档中

javascript - Angular 14 安装 apollo-angular 时出现错误

Javascript:破坏性的 array.filter()?

javascript - Babel 'protoToAssign' 变压器和 ES6 类继承

javascript - 在 Javascript 中修改事件对象

javascript - 由于无效的钩子(Hook)调用错误,比较自定义的 props 不起作用

javascript - 我应该什么时候使用 let 和 var?

javascript - ES6 生成器函数中星号 (*) 的用途是什么

javascript - Intellij Idea Ecmascript Harmony 模块语法