Skip to main content

map weakmap set weakset 区别

set 和 map 主要用于 数据重组 和 数据存储,set 是集合的数据结构,map 是字典的数据结构

集合与字典的区别:

共同点:集合、字典 可以存储不重复的值 不同点:集合是以[value,value]的形式存储元素;字典是以[key,value]的形式存储

set

set 是 ES6 新增的一种新的数据结构,类似于数组,但是成员唯一且无序,没有重复的值;set 对象允许你存储任何类型的唯一值,无论是原始值或是对象的引用。且本身就是一种构造函数,用于生成 set 数据结构

var set = new Set();  //Object

set.add(2)

// size为元素个数
console.log(set.size) // 1

[1,2,3,4,5].forEach(i=>set.add(i))

console.log(set) // [2,1,3,4,5] 输出只会有一个2

WeakSet

可将若对象存储在一个集合中

weakmap 与 Set 的区别主要在于:

  • WeakSet 只能存储对象引用,不能存放值,而 Set 对象可以
  • WeakSet 对象中存储的对象值都是被弱引用的,对象会被垃圾回收掉。WeakSet 对象中元素取决于垃圾回收机制有没有运行,运行前后可能会不一致。
  • WeakSet 对象无法被遍历,不能拿到它包含的所有元素

map

map 对象保存键值对,任何值都可以作为一个键或一个值

const map = new Map([
[1, 1],
[2, 2],
[3, 3]
])
console.log([...map]) // [[1, 1], [2, 2], [3, 3]]

WeakMap

WeakMap 对象是一组键值对的集合,其中键是弱引用对象,值是可以任意。WeakMap 弱引用的只是键名,键值依然是正常引用。

参考