简述Set、Map、WeakSet 和 WeakMap 的区别 ?

Set、Map、WeakSet 和 WeakMap 都是 ES6 中引入的新的数据结构。他们的主要区别如下:

  1. Set:Set是一种特殊的列表,元素只能是唯一的(没有重复的元素),并且元素可以是任意类型。Set有一些有用的方法,如add、delete、has等。
    let set = new Set();
    set.add(1);
    set.add('1');
    console.log(set.has(1));  // 输出 true
    console.log(set.size);  // 输出 2,因为1和'1'被视为两个不同的元素
    

    WeakSet:WeakSet与Set类似,但有两个关键的区别。首先,WeakSet的元素只能是对象,不能是其他类型的值。其次,WeakSet中的对象都是弱引用的,如果没有其他地方引用这个对象,它会被垃圾回收掉,而且WeakSet没有size属性,不能遍历它的元素。

    let weakSet = new WeakSet();
    let obj = {};
    weakSet.add(obj);
    console.log(weakSet.has(obj));  // 输出 true
    

    Map:Map是一种特殊的键值对列表,键和值可以是任意类型。Map有一些有用的方法,如set、get、has、delete等。

    let map = new Map();
    map.set(1, 'one');
    map.set('1', 'one');
    console.log(map.get(1));  // 输出 'one'
    console.log(map.size);  // 输出 2,因为1和'1'被视为两个不同的键
    

    WeakMap:WeakMap与Map类似,但也有两个关键的区别。首先,WeakMap的键只能是对象,不能是其他类型的值。其次,WeakMap中的键名所指向的对象,是弱引用的,如果没有其他地方引用这个对象,它会被垃圾回收掉,而且WeakMap没有size属性,不能遍历它的键值。

    let weakMap = new WeakMap();
    let obj = {};
    weakMap.set(obj, 'object');
    console.log(weakMap.get(obj));  // 输出 'object'
    

    总的来说,Set和Map可以存储任意类型的键值,支持遍历,且键值是强引用的;而WeakSet和WeakMap只能存储对象类型的键值,不支持遍历,且键值是弱引用的,适合处理大量数据且不需要遍历的场景,能有效防止内存泄漏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值