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() | 遍历字典的所有成员 |