ES6新数据结构Set与WeakSet用法分析

发布时间 - 2026-01-11 00:27:36    点击率:

本文实例讲述了ES6新数据结构Set与WeakSet用法。分享给大家供大家参考,具体如下:

新数据结构Set与WeakSet

1. Set

Set类似于数据,但是成员值都是唯一的。生成Set的方式如下。

var s = new Set();
[1,1,3,3,5,5].map( x => s.add(x) );
console.log(s); //Set {1, 3, 5}

没有重复值哟,如果面试官再让你编写数组去重的函数是不是简单多了。或者你可以这样写。

var set = new Set( [2,2,4,4,6,6] ); //Set {2, 4, 6}
console.log(set);

其实,Set作为构造函数使用时,接受的参数不仅可以是数组,任何类数组的对象也可以。Set的成员可以是对象,只是每个对象唯一。

那么,我们如何操纵Set呢。

s.add(val); //为s添加val,返回s
s.delete(val); //删除val,返回表示成功与否的布尔值
s.has(val); //返回表示s是否拥有成员val的布尔值
s.clear(); //清除所有成员

map与filter方法可以作用于数组,也可以用于Set(见第一个代码块)。

那么,我们如何遍历Set呢。

依然是 keys() , values() , entries() , forEach() . 举例如下(默认情况下Set的键与值相同):

var s = new Set();
var ul = document.getElementsByTagName('ul');
[1,1,3,3,5,5].map( x => s.add(x) );
for ( let key of s.keys() ){
  console.log(key); //1 , 3, 5
}
for ( let val of s.values() ){
  console.log(val); //1, 3,5
}
for ( let item of s.entries() ){
  console.log(item[0],item[1]); // 1 1 , 3 3, 5 5
}
for ( let [key,val] of s.entries() ){
  console.log(key,val); // 1 1 , 3 3, 5 5
}
s.forEach( function( val , key , ul ){
  console.log( this ); //ul
  console.log( val , key);
} , ul );

可以使用...扩展操作符把Set转换成数组。

2.WeakSet

WeakSet与Set类似,也是不重复的集合。区别在于:WeakSet的成员只能是对象;WeakSet中的对象是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用。当其他变量不再引用某对象,其将被垃圾回收机制回收,哪怕这个对象被WeakSet引用。这意味着,WeakSet的成员是无法被引用的,无法遍历WeakSet。WeakSet只有add、delete和has三个方法。注意:WeakSet没有size属性,也没有forEach方法。

对于WeakSet不能被遍历,可以这样解释。因为其成员都是弱引用,随时可能消失,遍历机制无法保证其成员一直存在。

那你可能问,WeakSet用来做什么,答,储存DOM节点,这样移除DOM时就可以不用担心内存泄漏了。

希望本文所述对大家ECMAScript程序设计有所帮助。


# ES6  # 数据结构  # Set  # WeakSet  # ES6 系列之 WeakMap的使用示例  # 详解ES6通过WeakMap解决内存泄漏问题  # ES6中Set与WeakSet集合的深入讲解  # ES6新增数据结构WeakSet的用法详解  # ES6中如何使用Set和WeakSet  # ES6中的WeakMap和WeakSet特性和用途详解  # 遍历  # 都是  # 你可以  # 第一个  # 布尔值  # 做什么  # 那你  # 给大家  # 将被  # 为其  # 可以使用  # 时就  # 转换成  # 类似于  # 所述  # 程序设计  # 保证其  # 移除  # 再让 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  如何用wdcp快速搭建高效网站?  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  如何正确选择百度移动适配建站域名?  千库网官网入口推荐 千库网设计创意平台入口  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  Laravel如何使用模型观察者?(Observer代码示例)  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Laravel如何为API生成Swagger或OpenAPI文档  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  JavaScript模板引擎Template.js使用详解  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  原生JS获取元素集合的子元素宽度实例  奇安信“盘古石”团队突破 iOS 26.1 提权  使用Dockerfile构建java web环境  焦点电影公司作品,电影焦点结局是什么?  高端云建站费用究竟需要多少预算?  如何用y主机助手快速搭建网站?  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  Laravel集合Collection怎么用_Laravel集合常用函数详解  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  Android利用动画实现背景逐渐变暗  如何破解联通资金短缺导致的基站建设难题?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  高防服务器租用如何选择配置与防御等级?  Laravel如何配置和使用缓存?(Redis代码示例)  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  HTML 中如何正确使用模板变量为元素的 name 属性赋值  如何挑选优质建站一级代理提升网站排名?  网站页面设计需要考虑到这些问题  微信公众帐号开发教程之图文消息全攻略  Laravel如何实现用户密码重置功能?(完整流程代码)  手机软键盘弹出时影响布局的解决方法  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  Laravel安装步骤详细教程_Laravel环境搭建指南  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  Laravel观察者模式如何使用_Laravel Model Observer配置  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  微信小程序 canvas开发实例及注意事项