【WeakSet & WeakMap Demo】

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // WeakMap 有以下特殊限制:
      // 1. 不支持 size 属性
      // 2. 不支持 clear() 方法
      // 3. 不能遍历(没有 keys() 、 values() 和 entries() 方法)
      // 这些限制的原因是 WeakMap 的"弱引用"特性:

      // - 键对象可能随时被垃圾回收
      // - 系统无法准确追踪还存在多少键值对
      // - 所以不提供任何遍历或统计相关的功能


      // WeakSet 有以下特殊限制:
      // 1. 不支持 size 属性
      // 2. 不支持 clear() 方法
      // 3. 不能遍历(没有 keys()、values() 和 entries() 方法)
      // 4. 只能添加对象,不能添加原始值
      // 这些限制的原因是 WeakSet 的"弱引用"特性:

      // - 集合中的对象可能随时被垃圾回收
      // - 系统无法准确追踪还存在多少元素
      // - 所以不提供任何遍历或统计相关的功能

      let ws = new WeakSet();
      let obj = { name: "张三" };
      ws.add(obj);

      // ========================

      let map = new WeakMap();
      // key 得是 对象
      let key = { name: "zhangsan" };
      map.set(key, "zhangsan");

      console.log("---->", map.size); // 🙅
      console.log(map.has(key));
    </script>
  </body>
</html>

Weak 语义是弱和阉割,

posted @ 2025-04-10 22:35  十三山入秋  阅读(6)  评论(0)    收藏  举报