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

map set weakmap weakset

程序员文章站 2022-06-12 21:42:36
...

Map Set方法都可以使用for...of方法,不可以使用for...in

Map

Map与get、set。Map存储key-value键值对,重复向同一个key添加value,会替代原来的value

//两种创建方式
var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 删除key 'Adam'
m.get('Adam'); // undefined
Set

Set中只存储key且不会有重复的key,因此重复添加key不会有任何变化,没有length属性

//两种创建方式
var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3
s2.add(4)//一次只能添加一个
s2.delete(3)
s2.clear()//移除Set内所有元素
Set.has(value)
Set.forEach(callbackFn[, thisArg])
Map特性:
Map.length=0
Map.prototype.size  返回Map对象的键/值对的数量。
Map的键可以是任意值,包括函数、对象和任意基本类型
Map 中的 key 是有序的。因此,当迭代的时候,一个 Map 对象以插入的顺序返回键值。
Map 是 iterable 的,所以可以直接被迭代。
在频繁增删键值对的场景下表现更好
如果我们使用对象作为常规 Map 的键,那么当 Map 存在时,该对象也将存在。它会占用内存,并且应该不会被(垃圾回收机制)回收,除非使用map.clear()
WeakMap特性:
不可迭代
key值只能是对象
key值与其指向的对象是一种弱指向,不会影响其是否被垃圾回收机制删除
当key值对象没有被别处引用时,该对象会被从内存中删除
weakset特性

WeakSet 的表现类似:

  • Set 类似,但是我们只能向 WeakSet 添加对象(而不能是原始值)。
  • 对象只有在其它某个(些)地方能被访问的时候,才能留在 set 中。
  • Set 一样,WeakSet 支持 addhasdelete 方法,但不支持 sizekeys(),并且不可迭代。
相关标签: javascript