本文为《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() 返回布尔值