介绍下 Set、Map、WeakSet 和 WeakMap 的区别

1. set是什么

set是一种叫做集合的数据结构,类似数组,不过相较于数组来说,不同点是:

  • set内数据都是唯一的,无序,里面的值可以是任何类型,且不会发生任何类型转换

set和数组可以互相转换:

  • set转map: [...new Set([1,2,3])]、Array.from(new Set([1,2,3]))
  • map转set:new Set([1,2,3])

set里的方法

set1 = new Set([1,2,3])

// 1. 新增:add
set1.add(4) // Set(4) {1, 2, 3, 4}
// 2. 删除:delete
set1.delete(3) // true
console.log(set1) // Set(3) {1, 2, 4}
// 3.获取keys和value,返回是一样的遍历器
// key和value的值是一样的,或者说只有key
set1.keys() // SetIterator {1, 2, 4}
set1.values() // SetIterator {1, 2, 4}
// 使用一下~
for(var i of set1.values()) {
    console.log(i)
} 
// 1 2 4

// 4. 遍历:forEach
set1.forEach(i => {
    console.log(i)
})
// 1 2 4
// 5. has:判断是否包含value

2. map

map是一种叫做字典的数据结构,任何具有迭代器的双数组结构都可以作为Map构造函数的参数

map和set的区别

  • 同:值唯一
  • 异:map的数据结构是[key,value],set的数据结构是[value, value]

map和对象的区别

  • map的key可以是任何值,所以map的结构是value: value
  • 数组的key只能是字符串

map里的方法

1. set
2. get
3. delete
4. has
5. clear
...

其中get方法,map的key和内存空间绑定,也就是只有对同一个对象的引用,才视为同一个key,如果key是普通类型,则如果强等(===)才视为同一个key,但NaN例外,虽然NaN!==NaN,但字典里NaN视为同一个值

m1 = new Map()
b = [3]
m1.set(b, 1)
m1.get(b) // 1
m1.get([3]) // undefined
c = b
m1.get(c) // 1

3. weekset

  • weekset和set大致相同,区别是:
    • weekset的只能存储引用类型的值,不能存放普通类型的值;set都可以
    • weekset里的值都是弱引用,垃圾回收机制运行前后,set内成员数量可能不一样,只要没有其他(不考虑weekset)变量或属性引用,这个对象就会被垃圾回收,因此weekset不能够被遍历,也无法获取全部成员

weekset的方法

1. add
2. delete
3. has
...

4. weekmap是什么

  • weekmap和mp的大致相同,区别是
    • weekmap的key只能存储引用类型的值,且为弱引用,但value可以是任意值
    • WeakMap 中,每个键对自己所引用对象的引用都是弱引用,在没有其他引用和该键引用同一对象,这个对象将会被垃圾回收(相应的key则变成无效的),所以,WeakMap 的 key 是不可枚举的。

weekmap的方法

// 1. set
// 2. get
// 3. delete
// 4. has

总结方法

类型 map weekmap set weekset 备注
操作方法 add(value) add(value) set(key, value) set(key, value) 操作方法 新增/赋值
操作方法 get(key) get(key) 取值
操作方法 delete(value) delete(value) delete(key) delete(key) 删除
操作方法 has(value) has(value) has(key) has(key) 判断是否有值
操作方法 clear() clear() 清空
遍历方法 keys() keys() 将包含的所有键名以迭代器形式返回
遍历方法 values() values() 将包含的所有数值以迭代器形式返回
遍历方法 entries() entries() 返回所有成员的迭代器
遍历方法 forEach() forEach() 遍历字典的所有成员

参考

map、set

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容