Map
和WeakMap
也是 ES6 推出的新的数据结构。Map
对象保存着多组键值对,与Object
不同的是,任何对象或原始值都可以作为一个键。Map
对象的键是唯一的,Map
比较键是否是唯一的算法是"Same-value-zero equality",与Set
比较值是否唯一的算法一样,除了NaN === NaN
,其他运算结构与===
运算发一致。
Map
对象的构造函数传入一个二维数组,直接生成一个Map
实例for...of
语句遍历,使用for...of
语句遍历Map
对象时,返回一个[key, val]
数组Object
来替代Map
对象,那么在选择使用Map对象还是Object时,可以考虑以下问题:Map
会比Object
更好。undefined
。true
,不存在则返回false
。Map
实例是否包含键对应的值。Map
对象的所有键/值对Iterator
对象,它按插入顺序包含了Map对象中每个元素的[key, value]
数组。Iterator
对象, 它按插入顺序包含了Map对象中每个元素的键。Iterator
对象,它按插入顺序包含了Map对象中每个元素的值。Map
对象里的每一键值对调用一次回调函数。如果为forEach
提供了context
,它将在每次回调中作为this
值。Map
所不同的是,WeakMap
中的键必须是对象,而其是弱引用的。(值可以是任意的)WeakMap
的 key 是非枚举的 (没有方法能给出所有的 key)。如果key 是可枚举的话,其列表将会受垃圾回收机制的影响,从而得到不确定的结果. 因此,如果你想要这种类型对象的 key 值的列表,你应该使用Map
。key
的关联对象。key
关联对象, 没有key关联对象时返回undefined
。true
,不存在则返回false
。WeakMap
实例是否包含键对应的值。