一,js中的Set
概念:set是一个值的集合,类似于数组。但是他与数组不同的是,他的值是唯一的。Set类也提供了一些有用的方法。
常用属性:
- size - 获取当前集合成员的数量
常用方法:
- add(value) - 添加一个值,返回Set本身
- delete(value) - 删除一个值,返回true或false
- has(value) - 判断该值是否为Set的成员,返回true或fasle
- clear() - 清除所有成员,没有返回值
示例:
var s = new Set();
s.add(2).add('张三');
console.log(s.has(2)); // true
console.log(s.has(3)); // false
console.log(s.size); // 2
s.delete('张三');
console.log(s.has('张三')); // false
二,js中的Map
概念:js中的Map是一个键值对的集合,类似于对象。Map的大部分特性都可以用Object类型来实现。但他与对象不同的是,Map可以用任意类型作为键值,而对象只能用string和Symbol类型。
常用属性:
- size - 获取当前集合成员的数量
常用方法:
- set(key, value) - 添加一个键值对,返回Map本身
- get(key) - 获取指定键对应的值
- delete(key) - 删除一个键,返回true或false
- has(key) - 判断该值是否存在某个键,返回true或fasle
- clear() - 清除所有成员,没有返回值
示例:
var m = new Map();
var key2 = {name: '张三', age: 18};
m.set(2, '第二').set(key2, {id: 123, name: '人类对象'});
console.log(m.get(2)); // '第二'
console.log(key2); // {id: 123, name: '人类对象'}
m.delete(2);
console.log(m.has(2)); // false
三,js中的WeakSet
WeakSet和Set类似,不同的是WeakSet的值都是对象类型,而且每个元素都是弱引用,如果没有被其他地方引用,就会自动删除释放内存。
四,js中的WeakMap
WeakMap与Map类似,不同的是WeakMap的键值都是对象类型,而且每个键值都是弱引用,如果键对象没有被其他地方引用,就会自动删除释放内存。
五,遍历Map和Set
他们都可以用forEach、for of来遍历;都不能用map来遍历
六,WeakSet和WeakMap的作用
WeakSet和WeakMap的弱引用机制,可以用来实现缓存