• js es6 map weakmap


    前言

    这里介绍一些map和weakmap的一些属性和他们不同之处。

    正文

    map

    JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制.

    ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。

    const m = new Map();
    const o = {p: 'Hello World'};
    
    m.set(o, 'content')
    m.get(o) // "content"
    
    m.has(o) // true
    m.delete(o) // true
    m.has(o) // false
    

    Map 也可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。

    const map = new Map([
      ['name', '张三'],
      ['title', 'Author']
    ]);
    
    map.size // 2
    map.has('name') // true
    map.get('name') // "张三"
    map.has('title') // true
    map.get('title') // "Author"
    

    如果对同一个键多次赋值,后面的值将覆盖前面的值。

    const map = new Map();
    map.set(1, 'aaa').set(1, 'bbb');
    map.get(1) // "bbb"
    

    实例的属性和操作方法:

    (1)size 属性

    (2)set(key, value)

    (3)get(key)

    (4)has(key)

    (5)delete(key)

    (6)clear()

    {
     let map = new Map();
    map.set('foo', 11);
    map.set('bar', 22);
    map.size ;// 2
    map.get('foo');//t1
    map.has('boo');  //true
    map.delete('foo');  //true
    map.clear();
    map.size // 0
    }
    

    遍历方法

    Map 结构原生提供三个遍历器生成函数和一个遍历方法。
    keys():返回键名的遍历器。
    values():返回键值的遍历器。
    entries():返回所有成员的遍历器。
    forEach():遍历 Map 的所有成员。
    Map 结构的默认遍历器接口(Symbol.iterator属性),就是entries方法。

    WeakMap

    WeakMap结构与Map结构类似,也是用于生成键值对的集合。

    WeakMap与Map的区别有两点。

    首先,WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名。

    其次,WeakMap的键名所指向的对象,不计入垃圾回收机制。

    // WeakMap 可以使用 set 方法添加成员
    const wm1 = new WeakMap();
    const key = {foo: 1};
    wm1.set(key, 2);
    wm1.get(key) // 2
    
    // WeakMap 也可以接受一个数组,
    // 作为构造函数的参数
    const k1 = [1, 2, 3];
    const k2 = [4, 5, 6];
    const wm2 = new WeakMap([[k1, 'foo'], [k2, 'bar']]);
    wm2.get(k2) // "bar"
    

    WeakMap 的语法

    WeakMap 与 Map 在 API 上的区别主要是两个,

    一是没有遍历操作(即没有keys()、values()和entries()方法),也没有size属性。

    二是无法清空,即不支持clear方法。因此,WeakMap只有四个方法可用:get()、set()、has()、delete()。

  • 相关阅读:
    162. 寻找峰值
    152. 乘积最大子数组
    MAT 下载及安装
    Netty NIO基础
    MySQL insert into V.S. replace into
    Netty NIO 之 阻塞模式/非阻塞模式/多路复用
    Python 函数参数*args和**kwargs
    Netty NIO之ByteBuffer
    Python numpy 和 pandas
    Financial 协方差 Covariance
  • 原文地址:https://www.cnblogs.com/aoximin/p/13195454.html
Copyright © 2020-2023  润新知