欢迎您访问我爱IT技术网,今天小编为你分享的javascript教程:【ECMAScript6中Set/WeakSet详解】,下面是详细的讲解!
ECMAScript6中Set/WeakSet详解
ES6里加入了一个新数据解构Set,和Java的Set一样,它里面不存放重复的元素。Set实现为一个类,使用时需要先new。
var s1=new Set()
s1.add(1)
s1.add(2)
s1.add(3)
s1.add(1)
var s2=new Set()
s2.add('a')
s2.add('a')
// 输出1,2, 3
for (var i of s1 ) {
console.log(i)
}
// 输出a
for (var i of s2 ) {
console.log(i)
}
上面用Set的add方法添加元素,重复添加的,不会存进去。
Set构造器还可以接受数组作为参数传入
var s3=new Set([1,2,3,1]) s3.size // 3
可以看到重复的数字1依然没有放进去,另外取Set的长度使用size,不是length。
需要注意的是对于{}或[],它们是两个同的对象
var s4=new Set()
s4.add({})
s4.add({})
s4.size // 2
一、遍历Set (for of)
var s1=new Set()
s1.add(1)
s1.add(2)
s1.add(3)
// 输出1,2, 3
for (var i of s1) {
console.log(i)
}
二、把Set转成数组
var s1=new Set() s1.add(1) s1.add(2) // toArray var a1=Array.from(s1) Array.isArray(a1) // true // or var a1=[...new Set(s1)]
三、利用Set给数组去重
function distinct(arr) {
return Array.from(new Set(arr))
// return [...new Set(arr)]
}
如

Set的属性
constructor
size
Set的方法
has(val) 判断是否存在该元素
add(val) 添加元素
delete(val) 删除元素
clear 删除所有元素
keys
values
entries
forEach 遍历元素
map
filter
四、WeakSet
WeakSet和Set一样都不存储重复的元素,但有一些不同点
1. 只存储对象类型元素
ws=new WeakSet() ws.add(1)
FF下报错如下

2. 只有add/delete/clear/has三个方法,不能遍历,没有size属性等
ws=new WeakSet() ws.size // undefined ws.forEach // undefined
MDN的解释
WeakSet 对象中存储的对象值都是被弱引用的, 如果没有其他的变量或属性引用这个对象值, 则这个对象值会被当成垃圾回收掉. 正因为这样, WeakSet 对象是无法被枚举的, 没有办法拿到它包含的所有元素
WeakSet主要用来储存DOM节点,当这些节点从文档移除时,不会引发内存泄漏。
以上所述就是本文的全部内容了,希望大家能够喜欢。
关于ECMAScript6中Set/WeakSet详解的用户互动如下:
相关问题:新手求解释:NS2中 set dist(5m) 7.69113e-06 “dis...
答:这是NS-2提供一种无线传播模型(2径模型,包括直射波和地面反射波) 目前NS2支持三种无线传播模型(Radio Propagation Models): free space model two-ray ground reflection model shadowing model 后面的小数是指能量,你会发现随着距离的增... >>详细
相关问题:set /a Start=%time:~6,2% 中句中的 :~6,2 什么意思?
答:cmd 批处理语言中 ~6,2 表示截取 =%time:~6,2%表示赋值为变量time的部分 这部分为time的第六道到倒数第二个字符 演示cmd: ====================================== ::code by DLLL gy-data . tk ::目的:帮助新手们更好的理解变量字符截取功能. ... >>详细
相关问题:外贸中的SET/CTN是什么意思
答:SET/CTN表示的是”套数/每箱“。 扩展: pcs/ctn就是指:多少个每箱; pcs是pieces的缩写 指:件,个数;ctn是carton的缩写 指:箱;set本意就有一套的意思 >>详细
- 【Array】js中更短的 Array 类型转换-类型转换
- 【ExtJs】ExtJs 表单提交登陆实现代码-表单提交-
- 【addClass】javascript自定义的addClass()方法
- 【Ajax】jQuery 学习第六课 实现一个Ajax的TreeVi
- 【cookie】不要在cookie中使用特殊字符的原因分析
- 【extjs】extjs每个组件要设置唯一的ID否则会出错
- 【focus】JavaScript使用focus()设置焦点失败的解
- 【bootstrap3】基于bootstrap3和jquery的分页插件
- 【fn】开发插件的两个方法jquery.fn.extend与jque
- 【datagrid】jQuery easyui datagrid动态查询数据
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
