es6-Set

256 阅读1分钟

本文为《ECMAScript 6 入门》学习笔记

Set

Set

Set 是一个构造函数,数据结构类似数组,生成的数据成员值都是唯一的,没有重复的值

用法

var s = new Set([1,1,3,3,5,6])
console.log(s)
[...s]
// [1,3,5,6]

Set可以接收数组作为参数,Set可以去除重复数据

Set 使用“Same-value-zero equality”算法判断数据是否相等,和 === 运算符类似。

但不同的是,Set 认为 NaN 等于自身,而 === 认为NaN 不等于自身

let set = new Set();
let a = NaN;
let b = NaN;
set.add(a)
set.add(b);
[...set]
// [NaN]

属性和方法

  • Set.prototype.constructor

  • Set.prototype.size

  • Set.prototype.add 返回Set结构本身

  • Set.prototype.delete 返回布尔值

  • Set.prototype.has() 返回布尔值

  • Set.prototype.clear 清除所有成员

遍历

  • Set.prototype.keys() 返回键名的遍历器
  • Set.prototype.values() 返回键值的遍历器
  • Set.prototype.entries() 返回键值对遍历器
  • Set.prototype.forEach()

WeakSet

WeakSet 和 Set 类似,但有两个区别

  • WeakSet 成员只能是对象,不能是其他数据类型
const ws = new WeakSet()
ws.add(1)
// Invalid value used in weak set at WeakSet.add
ws.add({a:'小明'})
  • WeakSet 中的对象都是弱引用,垃圾回收机制不考虑WeakSet对该对象的引用,其他对象不再引用该对象,垃圾回收机制自动收回对象占用的内存,不考虑该对象是否还在WeakSet中

具体演示效果可以看这篇文章 WeakMap

从弱引用这里,我学到了垃圾回收机制通过循环计数的方式, 具体可以看这个链接 内存管理

方法

  • WeakSet.prototype.add
  • Set.prototype.delete
  • Set.prototype.has() 返回布尔值

WeakSet 没有size属性,没有办法遍历它的成员