Set
- 属性:
- Set.prototype.constructor:
- Set.prototype.size:
- 方法
- 操作方法
- add
- delete
- has
- clear
- Array.from()可以将Set结构转为数组
- 遍历方法
- keys():返回键名的遍历器,结果与values()相同
- values(): 返回键值的遍历器
- entries():返回键值对的遍历器
- forEach(value,index,array)
- set结构实例默认可遍历
- 扩展运算符
...内部使用for...of循环,例如:[...new Set(arr)],去除重复成员
- 数组的map,filter间接的用于`new Set([...set].map(x => x * 2));
WeakSet
- 成员只能是对象,对象都是弱引用,webSet内的引用不计入垃圾回收机制,只适合临时存放一组对象以及对象的绑定信息,只要这些对象在外部消失,他在weakSet里面的引用就会消失。
- weakset的成员不适合引用,会随时消失,内部成员的个数,取决于垃圾回收机制有没有运行,es6规定weakSet不可遍历
- 属性
- 没有size属性,无法遍历。
- 一个用处,储存DOM节点。
Map
- Object,本质上是键值对的集合(Hash结构),传统上只能用字符当作键
- Map的set方法
- Map可以接受一个数组作为参数
const map = new Map([
['name', '张三'],
['title', 'Author']
]);
- 多次赋值会覆盖,读取位置的键,返回undefined
- Map的键名实际上跟内存地址绑定,只要内存地址不一样,就被认定为是两个键,如果是简单类型的值(数字、字符串、布尔值),值严格相等就将被视为一个键,undefined和null不同,NaN是同一个
- 实例属性和操作方法
- size
- set(key,value)
- get(key)
- has(key)
- delete(key)
- clear()
- 遍历方法
- keys()
- values()
- entries()
- forEach()
- Map与其他数据类型的转换
- Map转为数组
...
- 数组转Map,传入构造函数
- Map转为对象,如果所有键是字符串
function strMapToObj(strMap) {
let obj = Object.create(null);
for (let [k,v] of strMap) {
obj[k] = v;
}
return obj;
}
- 对象转为Map
function objToStrMap(obj) {
let strMap = new Map();
for (let k of Object.keys(obj)) {
strMap.set(k, obj[k]);
}
return strMap;
}
- Map转JSON,map键名都是字符串:先转换为对象,否则转为数组JSON
- JSON转Map,json转为对象,在转map,如果json是一个数组,直接传入Map构造函数。
weakMap
- weakMap只接受对象作为键名,不接受其他类型的值作为键名
- weakMap键名所指的对象,不计入垃圾回收机制
- 键名所引用的对象都是弱引用,即垃圾回收机制不将该引用考虑在内
- 应用创景:DOM 元素上添加数据,就可以使用WeakMap结构。当该 DOM 元素被清除,其所对应的WeakMap记录就会自动被移除
- 两个区别:没有便利擦欧总,没有size