ECMAScript6中Set/WeakSet详解

 更新时间:2015年06月12日 10:39:38   投稿:hebedich  
这篇文章主要介绍了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节点,当这些节点从文档移除时,不会引发内存泄漏。

以上所述就是本文的全部内容了,希望大家能够喜欢。

相关文章

  • 前端JavaScript数组方法总结(非常详细!)

    前端JavaScript数组方法总结(非常详细!)

    这篇文章主要介绍了JavaScript中数组对象的常用方法,包括数组的基本操作、查找、过滤、排序、遍历等方法,并提供了每个方法的语法和示例,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • 工作需要写的一个js拖拽组件

    工作需要写的一个js拖拽组件

    工作需要写的一个js拖拽组件,需要的朋友可以参考下代码。
    2011-07-07
  • uniapp微信小程序获取当前定位城市信息的实例代码

    uniapp微信小程序获取当前定位城市信息的实例代码

    因为uniapp官网文档的定位功能,只能提供经纬度,如果要获取当前具体的位置信息,必须要调取官方的地图方法,然后在地图上选点,下面这篇文章主要给大家介绍了关于uniapp微信小程序获取当前定位城市信息的相关资料,需要的朋友可以参考下
    2022-08-08
  • JS检测图片大小的实例

    JS检测图片大小的实例

    这篇文章介绍了JS检测图片大小的实例,有需要的朋友可以参考一下
    2013-08-08
  • 在JavaScript中如何访问暂未存在的嵌套对象

    在JavaScript中如何访问暂未存在的嵌套对象

    这篇文章主要给大家介绍了关于在JavaScript中如何访问暂未存在的嵌套对象的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用JavaScript具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • Javascript实现的StopWatch功能示例

    Javascript实现的StopWatch功能示例

    这篇文章主要介绍了Javascript实现的StopWatch功能,结合具体实例形式分析了javascript自定义StopWatch实现测试运行时间功能的相关操作技巧,需要的朋友可以参考下
    2017-06-06
  • javascript中常用的字符串函数解读

    javascript中常用的字符串函数解读

    这篇文章主要介绍了javascript中常用的字符串函数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • JavaScript动态创建div等元素实例讲解

    JavaScript动态创建div等元素实例讲解

    这篇文章主要介绍了JavaScript动态创建div等元素实例,
    2016-01-01
  • 小程序:授权、登录、session_key、unionId的详解

    小程序:授权、登录、session_key、unionId的详解

    这篇文章主要介绍了小程序:授权、登录、session_key、unionId的详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • JavaScript原生数组函数实例汇总

    JavaScript原生数组函数实例汇总

    这篇文章主要介绍了JavaScript原生数组函数实例汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10

最新评论