ES6——set、map
new Set():创建数值不可重复的类数组,===比较,但NaN与NaN相等
size、add()、delete()、clear()、has()、keys()、values()、entries()、forEach()
Array.form(new Set()):转成真正的数组
iterrator存在可直接遍历values: for...of 可用
new WeakSet():成员必须是对象,没有size、forEach不可遍历;成员对象的引用是弱类型,垃 圾回收时不考虑WeakSet,随时可以被回收,适合存放一些临时对象或对象的引用 信息
只有add()、delete()、has()
new Map():创建一个key值数据类型自由的对象;
任何具有 Iterator 接口、且每个成员都是一个双元素的数组的数据结构、都可以当作
Map
构造函数的参数;
多次set时,key值一样会被覆盖,注意key值一样是指地址一样;
size、get()、set()、delete()、clear()、has()、keys()、values()、entries()、forEach()
map转数组: [...new Map()]
数组转Map:new Map([])
map转对象:键值都是字符串无损;键值有其他类型时,转成字符串再转
对象转map:new Map(Object.entires(obj))
map转json:键值都为字符串=> JSON.stringify,键值有其他=> JSON.stringify([...map])
json转map:都为字符串 => JSON.parse; 数组对象 =>new Map(JSON.parse)
new WeakMap():键值只能是对象,目的是弱引用对象为键值时,不干扰垃圾回收机制
get()、set()、has()、delete()
弱引用的好处:做缓存,原始对象存在缓存,原始对象清除自动消失