1.Set和WeakSet
Set与数组相似,但是Set结构的成员必须是唯一的.
WeakSet与对象类型,但是WeakSet结构的成员只能是对象
Set结构的实例属性和方法
属性:
Set.prototype.constructor:构造函数
Set.prototype.size:返回Set实例的成员总数
方法:
--add(value):添加值,返回Set结构本身
--delete(value):删除某个值,返回一个布尔值
--has(value):返回一个布尔值,判断该值是否为Set的成员
--clear:清除所有成员,没有返回值
Set结构遍历方法:
--keys:返回键对的遍历器
--values:返回键值的遍历器
--entries:返回键值对的遍历器
--forEach:使用回调遍历每个成员
1 //声明一个Set类型(一) 2 var set = new Set([1,2,3,4,2,8,4]); 3 //声明一个Set类型(二) 4 var set = new Set(); 5 for(let i =0;i<5;i++){ 6 set.add(i); 7 } 8 for(let elem of set){ 9 console.log(elem); // 1,2,3,4,8 10 }
扩展运算符 (...),转成数组
var set = new Set(); [1,2,4,8,3,4].map(function(elem){ set.add(elem); }); console.log("set = "+set); //set = [object Set] //扩展运算,将setL类型变成数组类型 var arr = [...set]; console.log("arr = " +arr);//arr = 1,2,4,8,3
删除和清空
var set = new Set(); [1,2,4,8,3,4].map(function(elem){ set.add(elem); }); console.log("set = "+set); //set = [object Set] set.delete(2); //删除2 arr = 1,4,8,3 set.clear(); //清空 arr= //扩展运算,将setL类型变成数组类型 var arr = [...set]; console.log("arr = " +arr);//arr = 1,2,4,8,3
遍历键值
var set = new Set(); [1,2,4,8,3,4].map(function(elem){ set.add(elem); }); //键和值是相同的 set.forEach(function(value,key){ console.log(key + " = " + value);//1=1,2=2,3=3,4=4,8=8 });
WeakSet方法:
--add(value):添加 一个成员
--delete(value):清楚指定成员
--has(value):返回一个boolean,判断某个值是否存在
WeakSet的对象都是弱应用,即垃圾回收机制不考虑WeakSet对该对象的引用,也就是说如果其他的对象都不再引用该对象,该对象就会被回收机制收回。因此,WeakSet是不可遍历的,因为成员很可能在遍历之后被回收了,消失了,成员就取不到了。
2.Map和WeakMap