当前位置: 首页 > wzjs >正文

北京网站建设方案报价做网站背景图片怎么放

北京网站建设方案报价,做网站背景图片怎么放,国外做的比较的ppt网站有哪些方面,凡科建站教程目录 WeakSet 详解 基本概念 创建 WeakSet WeakSet 的主要方法 WeakSet 的特性 WeakSet 的使用场景 1. 避免内存泄漏(DOM 元素管理) 2. 临时缓存系统 3. 私有属性模拟 4. 防止循环引用 与其他数据结构的对比 1. WeakSet 没有实例属性 2. We…

目录

WeakSet 详解

基本概念

创建 WeakSet

WeakSet 的主要方法

WeakSet 的特性

WeakSet 的使用场景

1. 避免内存泄漏(DOM 元素管理)

2. 临时缓存系统

3. 私有属性模拟

4. 防止循环引用

与其他数据结构的对比

1. WeakSet 没有实例属性

2. WeakSet 仅有的方法

3. 原型链属性

WeakSet 注意事项

WeakSet 最佳实践建议

完整HTML示例代码

WeakSet 详解

WeakSet 是 JavaScript 中的一种集合类型,与普通的 Set 类似,但有一些重要的区别。下面我将详细讲解 WeakSet 的特性、用法以及与 Set 的区别

基本概念

WeakSet 是一种特殊的集合,它只能存储对象引用,不能存储原始值(如数字、字符串、布尔值等)。与 Set 不同,WeakSet 中的对象是弱引用的,这意味着如果没有其他引用指向这些对象,它们可以被垃圾回收机制自动回收。

创建 WeakSet

const weakSet = new WeakSet();const obj1 = {};
const obj2 = {};// 添加对象到 WeakSet
weakSet.add(obj1);
weakSet.add(obj2);console.log(weakSet.has(obj1)); // true

WeakSet 的主要方法

  1. add(value): 向 WeakSet 添加一个对象

  2. delete(value): 从 WeakSet 中移除指定的对象

  3. has(value): 检查 WeakSet 中是否包含指定的对象

注意:WeakSet 没有 size 属性,也没有 clear() 方法,也不能被遍历(没有 forEachkeysvalues 等方法)

WeakSet 的特性

1.只能存储对象引用

const weakSet = new WeakSet();
weakSet.add(1); // TypeError: Invalid value used in weak set
weakSet.add("string"); // TypeError: Invalid value used in weak set

2.弱引用特性

  • 如果 WeakSet 中的对象没有其他引用,它会被垃圾回收

  • 这使得 WeakSet 适合用于存储临时对象或私有数据

3.不可枚举

  • 无法获取 WeakSet 中的所有值

  • 没有 size 属性,无法知道集合中有多少元素

WeakSet 的使用场景

1. 避免内存泄漏(DOM 元素管理)

场景:跟踪 DOM 元素是否被处理过

const processedElements = new WeakSet();document.querySelectorAll(".btn").forEach(btn => {processedElements.add(btn);btn.addEventListener("click", () => {if (processedElements.has(btn)) {// 确保只处理一次}});
});// 当 DOM 元素被移除时,WeakSet 自动清理引用

2. 临时缓存系统

场景:缓存计算结果,当对象不再使用时自动失效

const cache = new WeakSet();function heavyCalculation(obj) {if (cache.has(obj)) {return "结果来自缓存";}const result = /* 复杂计算 */;cache.add(obj);return "结果来自计算";
}

3. 私有属性模拟

场景:标记对象是否已初始化(ES6 Class)

const initialized = new WeakSet();class SecureAPI {constructor() {initialized.add(this);}fetchData() {if (!initialized.has(this)) {throw new Error("必须先初始化实例");}// 安全执行逻辑}
}

4. 防止循环引用

场景:深度拷贝时记录已处理对象

function deepClone(obj, visited = new WeakSet()) {if (typeof obj !== "object" || obj === null) return obj;if (visited.has(obj)) return null; // 避免循环引用visited.add(obj);// 继续克隆逻辑...
}

与其他数据结构的对比

特性WeakSetSetWeakMap
键类型对象任意值对象
值类型无(仅存储对象引用)任意值任意值
垃圾回收自动清理无引用的键不自动清理自动清理无引用的键
遍历能力❌ 不可遍历✅ 可遍历❌ 不可遍历
典型场景临时标记、防内存泄漏通用集合操作对象关联元数据

1. WeakSet 没有实例属性

  • 没有 size 属性
    Set 有 size 属性可以获取元素数量,但 WeakSet 没有类似属性
    原因:WeakSet 的元素是弱引用,垃圾回收可能随时移除元素,无法保证 size 的准确性。

  • 没有迭代器属性
    Set 支持 keys()values()entries() 等迭代方法,但 WeakSet 不支持遍历

2. WeakSet 仅有的方法

WeakSet 只有以下 3 个核心方法(无属性):

方法名作用示例
add(value)添加对象到 WeakSetweakSet.add(obj)
has(value)检查对象是否存在weakSet.has(obj) → true
delete(value)删除指定对象weakSet.delete(obj)

3. 原型链属性

通过 Object.getOwnPropertyNames(WeakSet.prototype) 可以看到,WeakSet 的原型链上只有方法,没有属性:

console.log(Object.getOwnPropertyNames(WeakSet.prototype)); 
// 输出: ["constructor", "add", "delete", "has"]

WeakSet 注意事项

  1. WeakSet 不可迭代,因此不能使用 for...of 循环

  2. 不能查看 WeakSet 中的所有内容,只能检查特定对象是否存在

  3. 主要用于存储额外的对象信息,而不是作为主要的数据存储结构

WeakSet 最佳实践建议

  1. 优先用于临时性数据:WeakSet 适合存储短期存在的对象关联信息。

  2. 结合内存分析工具:使用 Chrome DevTools 的 Memory 面板验证内存管理效果。

  3. 避免替代普通 Set:需要统计数量或遍历时,必须使用普通 Set。

  4. 类型安全检查:添加对象前验证类型:

    function addToWeakSet(ws, obj) {if (typeof obj !== "object" || obj === null) {throw new TypeError("WeakSet 只接受对象");}ws.add(obj);
    }

完整HTML示例代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>WeakSet 完整方法演示</title><style>body {font-family: Arial, sans-serif;max-width: 800px;margin: 20px auto;padding: 20px;}button {margin: 5px;padding: 8px 12px;background: #4CAF50;color: white;border: none;border-radius: 4px;cursor: pointer;}#output {margin-top: 20px;padding: 15px;background: #f5f5f5;border-radius: 4px;}.obj-id {color: #2196F3;font-weight: bold;}</style>
</head>
<body>
<h2>WeakSet 方法演示</h2><div><button onclick="createObject()">1. 创建新对象</button><button onclick="addToWeakSet()">2. 添加到 WeakSet</button><button onclick="checkInWeakSet()">3. 检查是否存在</button><button onclick="deleteFromWeakSet()">4. 删除对象</button>
</div><div id="output"></div><script>const weakSet = new WeakSet();let currentObject = null;// 用于跟踪对象IDlet objectCounter = 0;function createObject() {currentObject = { id: `obj_${++objectCounter}` };log(`创建新对象: <span class="obj-id">${currentObject.id}</span>`);}function addToWeakSet() {if (!currentObject) return;weakSet.add(currentObject);log(`已添加对象 <span class="obj-id">${currentObject.id}</span> 到 WeakSet`);}function checkInWeakSet() {if (!currentObject) return;const exists = weakSet.has(currentObject);log(`对象 <span class="obj-id">${currentObject.id}</span> 在 WeakSet 中: ${exists}`);}function deleteFromWeakSet() {if (!currentObject) return;const deleted = weakSet.delete(currentObject);log(`删除对象 <span class="obj-id">${currentObject.id}</span>: ${deleted ? '成功' : '失败'}`);}function log(message) {const output = document.getElementById('output');output.innerHTML += `${message}<br>`;output.scrollTop = output.scrollHeight;}
</script>
</body>
</html>


文章转载自:

http://S8KAbzGL.dpppx.cn
http://Ohx2tmVz.dpppx.cn
http://CiCvD1xW.dpppx.cn
http://qopxnx3p.dpppx.cn
http://qhgfqIrX.dpppx.cn
http://BUqsZYsO.dpppx.cn
http://RmWGeyvi.dpppx.cn
http://JmFrCHjS.dpppx.cn
http://GlVY6FrN.dpppx.cn
http://szjblmOJ.dpppx.cn
http://89FU5PXE.dpppx.cn
http://8dkJZ2be.dpppx.cn
http://jyIVZ8cd.dpppx.cn
http://H7Ne2YhF.dpppx.cn
http://mCTgTk3A.dpppx.cn
http://Xvu0QvNL.dpppx.cn
http://OGGbBRRg.dpppx.cn
http://l6WHuZJ1.dpppx.cn
http://hvpQmi9F.dpppx.cn
http://U9NDVcLz.dpppx.cn
http://NKO46cLC.dpppx.cn
http://oj5w257E.dpppx.cn
http://exzIMjt2.dpppx.cn
http://qOOcG7GR.dpppx.cn
http://NJC0QaKE.dpppx.cn
http://pcqr1kXh.dpppx.cn
http://FP0qlUkQ.dpppx.cn
http://4YaqHX8n.dpppx.cn
http://S9mjBjTU.dpppx.cn
http://FkI1ND1r.dpppx.cn
http://www.dtcms.com/wzjs/763770.html

相关文章:

  • 企业备案的网站名称wordpress做网站怎么样
  • 自己电脑做网站还用备案河海大学土木专业类建设网站
  • 做网站主流网站网页设计去除下划线代码
  • 做cpa怎么建立自己网站淘宝店铺买卖交易平台
  • 网站开发的著作权归谁interidea 做网站
  • 做网站和优化共多少钱精英学校老师给学生做的网站
  • 企业建设网站没有服务器弄宽带要多少钱
  • 网站网站建设平台小公司网站模版
  • 网站建设的目的只是开展网络营销小公司建网站 优帮云
  • 视频素材网站推荐贵阳商城网站建设
  • 如何部署asp网站哪些网站怎么进
  • 哪个网站的图片专门做详情页的做网站的第一步
  • 北京网站建设一条龙网络推广引流软件
  • 网站设计方案及报价单教师个人网站建设
  • 个人制作网站谷歌网站提交
  • 地方网站盈利模式怀化公司网站建设
  • 网站整体迁移该怎么做动画制作学什么专业
  • 西安网站建设wordpress免费文章采集器
  • 南京软月网站建设公司重庆市建设工程信息网招标文件
  • 进入网站自动全屏怎么做2017网站发展趋势
  • 站长统计app进入网址新版小猪多语种外贸网站建设
  • 郑州网站优化排名郑州网站推广排名公司
  • 中文html5网站欣赏wordpress网站修改域名
  • pt网站怎么下载与做软件开发哪里学
  • 有哪些好用的网站唐山个人网站建设
  • 网站建设怎么添加视频苏州交通网站建设
  • 风景旅游网站建设的设计思路网络设计工程师是干什么的
  • 网站如何提高权重下载站用什么cms
  • 网站设计制作费用wordpress 产品分类
  • 制作简历网站开发网站建设亇金手指排名十四