Map 和 WeakMap 的使用

2021-09-09  本文已影响0人  菜鸡前端

1. Set(有序不重复列表)

Set 表示有序不重复的列表,可以遍历,Set 也能用来保存 NaN 和 undefined, 如果有重复的NaN, Set会认为就一个 NaN (实际上 NaN!=NaN)。

<script>
  var set = new Set();

  // 添加成功
  set.add("b");
  set.add("a")
  set.add("c")

  // 删除成员
  set.delete("a");

  // 是否存在成员
  set.has("b")

  // 遍历成员
  set.forEach(el => {
    console.log(el)
  })

  // 支持迭代器
  for (const [key, value] of set.entries()) {
    console.log(`${key}: ${value}`);
  }
  for (const [key, value] of set.keys()) {
    // b: undefined
    // c: undefined
    console.log(`${key}: ${value}`);
  }
  for (const [key, value] of set.values()) {
    // b: undefined
    // c: undefined
    console.log(`${key}: ${value}`);
  }
</script>
image.pngimage.png

2. Map(有序集合)

Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值) 都可以作为一个键或一个值。它的方式和属性和 Set 大体相同。

image.pngimage.png

3. WeakMap (弱引用 Map)

image.pngimage.png

3.1 DOM 节点作为 key

因为 weakMap 不会影响垃圾回收,所以可以用来关联元数据,键为 dom 元素,值为该 dom 元素的元数据:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="node1"></div>
  <div id="node2"></div>
</body>
<script>
  var metadata = new WeakMap();
  var node1 = document.querySelector("#node1");
  var node2 = document.querySelector("#node2");
  metadata.set(node1, {
    id: 'node1'
  })
  metadata.set(node2, {
    id: 'node2'
  })
  console.log(metadata)
</script>
</html>

4. WeakSet (弱引用 Set)

上一篇 下一篇

猜你喜欢

热点阅读