这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战
Set + WeakSet
ES2015的标准增加了:Set + WeakSet,这篇文章我们就来了解一下什么是Set + WeakSet。
Set
Set对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
常用方法
我们在创建set对象后,可以使用相应的方法:
let mySet = new Set();
add
在Set对象尾部添加一个元素,返回该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相似,但是有两点不同:
WeakSet只能是对象的集合WeakSet持弱引用:集合中对象的引用为弱引用
总结
我们需要注意的是:NaN和undefined都可以被存储在Set 中, NaN之间被视为相同的值(NaN被认为是相同的,尽管 NaN !== NaN)。
如果你想了解ES的其他特性,请移步到 ES2015+碎片化学习,每天都在向前走一步,这是所有文章的目录入口。