Set
类似数组,成员值唯一,可以去重
const s = new Set();
[2,3,5,4,2,2,2].forEach(x=>s.add(x));
for (let i of s){
console.log(i);
} //2,3,5,4
Set的操作方法
- Set.prototype.add(value):添加某个值,返回Set结构本身
- Set.prototype.delete(value):删除某个值,返回一个布尔值表示是否删除成功
- Set.prototype.has(value):查询某个值是否为set的成员返回一个布尔值
- Set.prototype.clear(value):清除所有成员
Set的遍历方法
- Set.prototype.keys(): 返回所有键名的遍历器
- Set.prototype.values(): 返回所有键值的遍历器
- Set.prototype.entries() :返回所有键值对的遍历器
- Set.prototype.forEach(): 使用回调函数遍历每个成员
let set = new Set(['red','green','blue']);
for (let item of set.keys()){
console.log(item);
} // red green blue
for (let item of set.values()){
console.log(item);
} //red green blue
for (let item of set.entries()){
console.log(item);
}
// ["red", "red"]
// ["green", "green"]
// ["blue", "blue"]
let set = new Set([1,2,9]);
set.forEach((value,key)=>console.log(key + ':' + value))
//1:1
//2:2
//9:9
WeakSet
成员只能是对象,被引用的对象都是弱引用(垃圾回收机制不考虑WeakSet对该对象的引用),WeakSet不可被遍历
由于WeakSet不可被遍历所以他没有size属性,也没有Set的遍历方法
WeakSet的操作方法
- WeakSet.prototype.add(value):向WeakSet中添加一个实例
- WeakSet.prototype.delete(value):向WeakSet中删除一个实例
- WeakSet.prototype.has(value):返回一个布尔值,表示某个值是否在WeakSet中
Map
类似对象,也是键值对集合但是键的范围不限于字符串,可以是各种类型的值
Map的操作方法:
- Map.prototype.set(key,value):set方法设置键名key对应的键值为value,然后返回整个 Map 结构。如果key已经有值,则键值会被更新,否则就新生成该键。
- Map.prototype.get(key):get方法读取key对应的键值,如果找不到key,返回undefined。
- Map.prototype.has(key):has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。
- Map.prototype.delete(key):delete方法删除某个键,返回true。如果删除失败,返回false。
- Map.prototype.clear():clear方法清除所有成员,没有返回值。
const map = new Map([
['name','张三'],
['title','Author']
]);
map.size; // 2
map.has('name'); //true
map.get('name'); //张三
遍历方法:
- Map.prototype.keys():返回键名的遍历器。
- Map.prototype.values():返回键值的遍历器。
- Map.prototype.entries():返回所有成员的遍历器。
- Map.prototype.forEach():遍历 Map 的所有成员。
const map = new Map([
['F','no'],
['T','yes']
]);
for(let key of map.keys()){
console.log(key);
} //"F" "T"
for(let value of map.values()){
console.log(value );
} //"no" "yes"
for(let item of map.entries()){
console.log(item);
}
// ["F", "no"]
// ["T", "yes"]
map.forEach(function(value,key,map){
console.log("key: %s,value: %s",key,value);
});
// key: F,value: no
// key: T,value: yes
WeakMap
只接受对象名作为键名(null除外),WeakMap键名所指对面不计入垃圾回收机制
使用场景:它键的引用对象在未来将会消失
WeakMap同样不能遍历
WeakMap的操作方法
- WeakMap.prototype.set(key,value):set方法设置键名key对应的键值为value,然后返回整个 WeakMap结构。如果key已经有值,则键值会被更新,否则就新生成该键。
- WeakMap.prototype.get(key):get方法读取key对应的键值,如果找不到key,返回undefined。
- WeakMap.prototype.has(key):has方法返回一个布尔值,表示某个键是否在当前 WeakMap对象之中。
- WeakMap.prototype.delete(key):delete方法删除某个键,返回true。如果删除失败,返回false。