Set集合
- 包含多组键值对
- 无重复元素的有序列表
- 不是用来逐一访问每个元素,通常是用来检测给定的某个值在某个集合中是否存在。
创建set集合并添加元素
var set =new Set();
var key1={"name":1,"age":2};
var key2={};
set.add(key1);
set.add(key2);
set.add([1,2]);
set.add("1");
set.add(1)
set.add(+0);
set.add(-0)
- 不会对所存值进行强制的类型转换
- Set集合中的+0和-0被认为是相同的
- 向Set集合中添加多个对象,则它们之间彼此彼此独立
- 如果多次调用add()并传入相同的值作参数,则后续的调用实际会被忽略
has()、delete()、clear()、forEach()
set.forEach((value,key,sets)=>{
console.log(key+"~~~"+value)
console.log(sets)
})
console.log(set.has("1"))
set.delete("1")
console.log(set.has("1"))
set.clear()
console.log(set)
- Set集合的forEach()方法的回调函数前两个参数的值是一样的,因为Set集合没有键名
- has()检测Set集合中是否存在某个值
- delete()移除Set集合中某个元素
- clear()清除Set集合中所有元素
WeakSet
只存储对象的弱引用,不可以存储原始值
var set = new WeakSet();
var key1 = {
"name": 1,
"age": 2
};
var key2 = {};
set.add(key1);
set.add(key2);
set.add([1, 2]);
- 不支持forEach()
- 不支持size属性
- 传入非对象参数会报错
Map集合
- 许多键值对的有序列表
- 键名和对应的值支持所有的数据类型
set()、get()
var map=new Map();
var key1={};
map.set("name","Fan");
map.set("age",22);
map.set(key1,5);
console.log(map.get("name"));
console.log(map.get("age"));
console.log(map);
- 对象可作为对象属性的键名
has()、delete()、clear()、forEach()
map.forEach((value,key,maps)=>{
console.log(key+" "+value)
console.log(map)
})
console.log(map.has("name"))
map.delete("name")
console.log(map.has("name"))
map.clear();
console.log(map)
WeakMap
- 存储对象的弱引用,许多键值对的无序列表
- 键名必须是非null类型的对象
- 值可以是任何类型