Set与Map
Ecmascript-6
ES6 发布时间2015-6月,又称ECMAScript 2015
http://kangax.github.io/compat-table/es6/
Set
- 没有重复值的集合
- Set本身是一个构造函数,可以用来生成set的数据结构
- 其内部比较采用的是 === 全等
var s = new Set();
[7,2,3,4,5,6,2,5].map( (item) => s.add(item));
for( let i of s ) {
console.info(i);
}
结果:
7
2
3
4
5
6
实例属性与方法
- Set.prototype.constructor: 构造函数,默认就是Set函数
- Set.prototype.size: 返回Set实例的成员总数
操作方法
- add(value) 添加值,并返回Set结构本身
- delete(value) 删除某个值,返回一个boolean值,表示是否删除成功
- has(value) 判断是否存在某个值,返回一个boolean值
- clear() 清除所有值,无返回值
遍历方法
- keys() 返回键名遍历器
- values() 返回键值遍历器
- entries() 返回键值对遍历器
- forEach() 使用回调函数遍历 无返回值
- for ... of 来遍历
数组去重
function dedupe(array) {
return Array.from( new Set(array) );
}
WeakSet
区别于Set
- 成员只能是对象,不能是其他的数据类型
- 对象的引用是弱引用,即垃圾回收机制不考虑weakset对该对象的引用; 意味着成员随时可能消失,存在无法引用的weakset成员,因此weakset是不可遍历的
- 没有size属性
- 用处:存储DOM节点,而不用担心这些节点从文档删除时,会引发内存泄漏
var a= [[1,2],[3,4]];
var ws = new WeakSet(a);
- WeakSet.prototype.add(value)
- WeakSet.prototype.delete(value)
- WeakSet.prototype.has(value)
Map
- 存储key-value键值对形式的集合
- 区别于object{只能存储字符串的键名}; 可以存储各种类型的值作为键名
实例属性与操作方法
- size 成员总数
- set(key, value) 设置数值; 如果key存在,则直接更新键值
- get(key) 通过key获取值; 如果获取不到返回undefined
- has(key) 返回boolean类型,检测是否存在键
- delete(key) 删除某个键
- clear() 清除所有成员
遍历方法
- keys() 返回键名遍历器
- values() 返回键值遍历器
- entries() 返回键值对遍历器
- forEach() 使用回调函数遍历 无返回值
- for ... of 来遍历
var map = new Map([
['F', 'no'],
['T', 'yes']
]);
for( let [key, value] of map.entries() ) {
console.info(key , value);
}
WeakMap
- WeakMap结构与Map结构基本类似,唯一的区别它只接受对象作为键名(null除外),不接受其他类型的值作为键名,而且键名所指向的对象,不计入垃圾回收机制
- 没有遍历操作
- 不包含size属性
如果觉得文章对您有用,请点下推荐。您的支持将鼓励我继续创作!