ES6系列Map、WeakMap, Set、WeakSet

    // Map 的key是有序的,Map的key可以是任意值(函数、对象、基本类型), Map中的键值对不会被垃圾回收机制所回收
    // Map方法(set)
    // 基本类型
    let map = new Map()
    map.set(1, '测试1')
    map.set('1', '测试2')
    map.set(true, '测试3')
    map.set(null, '测试4')
    map.set(undefined, '测试5')
    // 函数、对象
    map.set({}, '测试6')
    map.set([], '测试7')
    const key = function(){}  // 如果键值是函数的话  不定义常量获取不到该键对应的值
    map.set(key, '测试8')
    map.set('test', {a:1,b:2})
    console.log(map);
    // Map方法(get)
    console.log(map.get(null));
    console.log(map.get('test'));
    console.log(map.get(key));
    // Map方法(has)
    console.log(map.has(1));
    console.log(map.has(key));
    // Map方法(clear) 该方法为清空map里的所有键值对
    // Map方法(dellete) 该方法为删除map里对应的键值对
    map.delete(key)
    console.log(map);
    // Map方法(entries(键值对)、keys(键)、values(值))
    console.log(map.entries());
    for (const key of map.entries()) { // for of 只可以遍历数组  for in 遍历对象
      console.log(key);
    }
    // Map方法(forEach) 获取到对应的值
    map.forEach(item => {
      console.log(item);
    })
    // WeakMap中key是有序的,WeakMap的key只可以是对象, WeakMap中的键值对会被垃圾回收机制所回收,WeakMap中没有entries、keys、values、forEach方法(存在get、set、delete、has方法),也没有size
    let weakmap = new WeakMap()
    // weakmap.set(1, 'test')
    // console.log(weakmap); // Invalid value used as weak map key
    const key = {a: 1, b: 2}
    weakmap.set(key,'test')
    console.log(weakmap);
    console.log(weakmap.has(key));
    console.log(weakmap.get(key));
    weakmap.delete(key)
    console.log(weakmap);
// Set 本身是一个构造函数(可以接受一个数组来做初始化),Set对象中存储的值总是唯一的,可以用作数组的去重
    // +0 与 -0 在存储判断唯一性的时候是恒等的,所以不重复
    // undefined 与 undefined 是恒等的,所以不重复
    // NaN 与 NaN 是不恒等的,但是在 Set 中认为 NaN 与 NaN 相等,所有只能存在一个,不重复
    // Set属性: size
    const set1 = new Set([1,5,4,7,9,8,0])
    console.log(set1.size);
    // Set方法:add(可以链式调用) delete(删除某个值,成功返回true失败返回false),has(判断是否存在该值),clear(清除所有数据)
    const set2 = new Set()
    set2.add(1).add(2).add(4).add({a:1})
    console.log(set2.has(4));
    console.log(set2.delete(4));
    set2.clear()
    console.log(set2);
    // Set中的遍历方法 keys():返回键名的遍历器。values():返回键值的遍历器。entries():返回键值对的遍历器。forEach():使用回调函数遍历每个成员。
    const set3 = new Set(['red','green','yellow'])
    for (const iterator of set3.keys()) {
      console.log(iterator);
    }
    for (const iterator of set3.values()) {
      console.log(iterator);
    }
    for (const iterator of set3.entries()) {
      console.log(iterator);
    }
    set3.forEach(item => {
      console.log(item);
    })
WeakSet 结构与 Set 类似,也是不重复的值的集合
成员都是数组和类似数组的对象,若调用 add() 方法时传入了非数组和类似数组的对象的参数,就会抛出错误。
成员都是弱引用,可以被垃圾回收机制回收,可以用来保存 DOM 节点,不容易造成内存泄漏
WeakSet 不可迭代,因此不能被用在 for-of 等循环中。
WeakSet 没有 size 属性。
仅有add、has、delete 方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值