欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Set,WeakSet,Map,WeakMap

程序员文章站 2022-06-12 21:46:48
...

参考文献: 阮一峰教程

Set

  • 基本用法
  1. 类似于数组,但是成员的值是唯一的,没有重复的值。
  2. var s = new Set()
  3. Set内部判断两个值是否不同使用的算法类似于精确相等运算符('===')。这意味着两个对象总是不相等的。唯一的例外是NaN等于自身('==='认为NaN不等于自身)
  • 实例的属性
  1. Set.prototype.constructor: 构造函数,默认是Set函数
  2. Set.prototype.size: 返回Set实例成员的个数
  • 实例的操作方法
  1. add(): 添加某个值,返回Set解构本身
  2. delete(): 删除某个值,返回一个布尔值,表示是否删除成功
  3. has(): 返回一个布尔值,表示参数是否是Set结构的成员
  4. clear: 清空所有成员,没有返回值
  • 实例的遍历方法
  1. keys()
  2. values() // Set结构的键名和键值是同一个值
  3. entries()
  4. forEach()
  • 总结
  1. 如果想在遍历操作中同步改变原来的Set结构,目前没有直接的方法,只有两种变通的方法。
// 方法一
let set = new Set([1,2,4])
set = new Set([...set].map(item => item * 2))

// 方法二
let set = new Set([1,2,4])
set = new Set(Array.from(set, x => x * 2))
复制代码

WeakSet

  • 基本用法
  1. WeakSet结构和Set类似,也是不重复的值的集合。但是,它与Set有两个区别
  2. WeakSet的成员只能是对象
  3. WeakSet中的对象都是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用。也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象是否还在存在于WeakSet结构中。
  4. var ws = new WeakSet()
  • 实例方法
  1. WeakSet.prototype.add()
  2. WeakSet.prototype.delete()
  3. WeakSet.prototype.has()

Map

  • 基本用法
  1. 类似于对象,也是键值对的集合,但是 '键' 的范围不限于字符串 (普通对象只能用字符串做key值),各种类型的值(包括对象)都可以作为key。
  2. 可以接受一个数组为参数,并且该数组的成员是一个个表示键值的数组new Map([['name', 'alex.cheng'], ['age', 24]])
  3. 获取一个未知的key,返回 undefined
  4. Map的键实际上是跟内存地址绑定的,只要内存地址不同,就视为两个键
  5. 0 和 -0,NaN 和 NaN 表示同一个键
  • 实例的属性和方法
  1. Map.prototype.size
  2. Map.prototype.constructor
  3. set(key, value)
  4. get(key)
  5. has(key)
  6. delete(key)
  7. clear()
  • 遍历方法
  1. keys()
  2. values()
  3. entries()
  4. forEach()
  • 总结
  1. Map本身没有map和filter方法,结合数组的方法,实现过滤
let map1= new Map()
    .set(1, 'a')
    .set(2, 'b')
    .set(3, 'c')
let map2 = new Map([...map1].filter(([key, value]) => k < 3))
// filter(([key, value) => {}) [key, value] 这里是解构赋值
复制代码

WeakMap

  • 基本使用

  1. WeakMap 结构与 Map 结构基本类似,唯一的区别是它只接受对象作为键名(null除外),不接受其他类型的值作为键名,而且键名所指向的对象不计入垃圾回收机制

2. WeakMap的设计目的在于,键名是对象的弱引用(垃圾回收机制不将该引用考虑在内),所以其所对应的对象可能会被自动回收。当对象被回收或者被销毁后,WeakMap将自动移出对应的键值对,再次访问的时候就是undefined。

  1. 有助于防止内存泄漏