JS中Map和WeakMap的不同

Map和WeakMap在JavaScript中都是用于存储键值对的集合。他们之间的主要区别在于键的类型和存储方式。

  1. 键的类型:在Map中,键可以是任何类型,包括对象、基本类型(例如字符串、数字)或者函数等。而在WeakMap中,键必须是对象,不能是其他基本类型。

  2. 存储方式:Map对键值对的存储是强引用,即只要Map对象存在,它的键值对就会一直在内存中,不会被垃圾回收机制回收。而WeakMap对键的引用是弱引用,如果没有其他地方引用这个键对象,那么这个键值对会被垃圾回收机制回收,以此来优化内存。

以下是代码举例:

// Map的使用
let map = new Map();
let keyString = "字符串";
let keyObj = {};
let keyFunc = function() {};

// 设置键值对
map.set(keyString, "这是一个字符串");
map.set(keyObj, "这是一个对象");
map.set(keyFunc, "这是一个函数");

// 获取值
console.log(map.get(keyString)); // 输出:"这是一个字符串"
console.log(map.get(keyObj)); // 输出:"这是一个对象"
console.log(map.get(keyFunc)); // 输出:"这是一个函数"

// WeakMap的使用
let weakmap = new WeakMap();
let obj = {};
let obj2 = {};

// 设置键值对
weakmap.set(obj, "这是obj");
weakmap.set(obj2, "这是obj2");

// 获取值
console.log(weakmap.get(obj)); // 输出:"这是obj"
console.log(weakmap.get(obj2)); // 输出:"这是obj2"

// 尝试使用字符串作为键
try {
  weakmap.set("test", "这是一个测试");
} catch (e) {
  console.log(e); // 输出:TypeError: Invalid value used as weak map key,因为WeakMap的键不能是基本类型
}

注意:由于WeakMap的键被弱引用,所以WeakMap的键是不可枚举的(即WeakMap没有keys()、values()和entries()方法),这也是Map和WeakMap的一个主要区别。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值