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开发实例及注意事项

