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属性
posted @ 2020-05-12 09:15  pengsn  阅读(115)  评论(0编辑  收藏  举报