Map和WeakMap

Map和WeakMap

一、Map

​ Map跟Object对象很像,但不同的是,它的key键名的类型不再局限于字符串类型了,它可以是各种类型的值

Map的方法

  1. Map的初始化

    // let map = new Map(1, 2, 3)//  number 1 is not iterable 
    // let map = new Map([1, 2, 3])  // Iterator value 1 is not an entry object
    // 元素得是数组 [key,value]
    let map = new Map([[1, 2], ['name', 'zs'], [4, 5], [{ name: 'zs' }, function () { }]])
    console.log(map); //Map(4) {1 => 2, 'name' => 'zs', 4 => 5, {…} => ƒ}
    
  2. set(key,value)方法 给实例设置一对键值对,返回map实例。

    map.set(4, 6) // 相同的属性名 会替换之前的属性
    map.set(true, null)
    map.set({ age: 18 }, undefined)
    console.log(map); //Map(6) {1 => 2, 'name' => 'zs', 4 => 6, {…} => ƒ, true => null, …}
    
  3. get(key) 通过属性名获取属性值

    console.log(map.get(1)); //2
    console.log(map.get(4)); //6
    console.log(map.get(true)); //null
    console.log(map.get({ name: 'zs' })); //undefined  为什么会是undefined呢,看文章末尾解释
    
  4. size属性 获取Map长度

    console.log(map.size) //6
    
  5. delete属性 删除指定的键值对 成功true 失败 false

    console.log(map.delete(1)); //true
    console.log(map.delete({ name: 'zs' })); //false  为什么会是false呢,看文章末尾解释
    console.log(map); //
    
  6. clear()方法 清除所有成员

    map.clear()
    console.log(map); //Map(0) {size: 0}
    
  7. has()方法 判断Map结构中是否含有指定的值。如果有,返回true;如果没有,返回fasle。

    //使用前先把clear方法注释掉,才会跟此代码块结果一致
    console.log(map.has(1)) //false  因为在delete中已经删掉
    console.log(map.has('name')) //true
    console.log(map.has({ name: 'zz' })) //false  为什么会是false呢,看文章末尾解释
    
  8. entries()方法 返回一个键值对的遍历器。

    console.log(map.entries()) 
    for (let [key, value] of map.entries()) {
      console.log(key) //遍历键
      console.log(value)  //遍历值  键和值一一对应
    }
    
  9. keys()方法 返回键名的遍历器

    for (let key of map.keys()) {
      console.log(key) // name 4 {name: 'zz'} true {age: 18}
    }
    
  10. values()方法 返回键值的遍历器

    for (let value of map.values()) {
      console.log(value) // zs 6 f(){} null undefined 
    }
    
  11. forEach 遍历

    map.forEach((item, index) => {
      // console.log(item);
      console.log(index) // name 4 {name: 'zz'} true {age: 18}
    })
    

二、WeakMap

  • 注意点key只能是引用类型的值

    let wMap = new WeakMap([[{ name: "zs" }, 2]])
    console.log(wMap); //WeakMap {{…} => 2}
    wMap.set([4], 5)
    console.log(wMap); //WeakMap {{…} => 2, Array(1) => 5}
    

    三、为什么会是false

  • ​ 因为数组是引用类型,他们的值相等,但地址不相等,举个例子

    let arr = [3]
    let arr_1 = [3]
    console.log(arr == arr_1) //false
    
  • 48
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值