ES2015之Set + WeakSet

147 阅读2分钟

这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战

Set + WeakSet

ES2015的标准增加了:Set + WeakSet,这篇文章我们就来了解一下什么是Set + WeakSet

Set

Set对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。

常用方法

我们在创建set对象后,可以使用相应的方法:

let mySet = new Set();

addSet对象尾部添加一个元素,返回该Set对象,使用如下:

const add1 = mySet.add('也笑')
console.log(add1, mySet); //Set(1) { '也笑' } Set(1) { '也笑' }

clear

移除Set对象内的所有元素,使用如下:

mySet.clear()

has 返回一个布尔值,表示该值在Set中存在与否,使用如下:

mySet.has('也笑'); //true

delete

移除Set中与这个值相等的元素,返回Set.prototype.has(value)在这个操作前会返回的值(即如果该元素存在,返回true,否则返回false)。Set.prototype.has(value)在此后会返回false

mySet.delete('也笑'); //true

使用场景

Set对象是值的集合,你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次,即 Set 中的元素是唯一的。从这句话中我们就可以想到它的一个使用场景:数组去重,如下:

const arr = [1, 1, 1, 2, 2, 3, 3, 9, 8, 7, 5, 5]
let mySet = new Set(arr);
console.log(mySet); // Set(7) { 1, 2, 3, 9, 8, 7, 5 }

const uniqueArr = [...mySet]
console.log(uniqueArr); //[ 1, 2, 3, 9, 8, 7, 5]

WeakSet

WeakSet 对象是一些对象值的集合, 并且其中的每个对象值都只能出现一次。它的用法和Set相似,但是有两点不同:

  1. WeakSet 只能是对象的集合
  2. WeakSet持弱引用:集合中对象的引用为弱引用

总结

我们需要注意的是:NaNundefined都可以被存储在Set 中, NaN之间被视为相同的值(NaN被认为是相同的,尽管 NaN !== NaN)。

如果你想了解ES的其他特性,请移步到 ES2015+碎片化学习,每天都在向前走一步,这是所有文章的目录入口。