1.map的常用方法
new Map() —— 创建 map。
map.set(key, value) —— 根据键存储值。
map.get(key) —— 根据键来返回值,如果 map 中不存在对应的 key,则返回 undefined。
map.has(key) —— 如果 key 存在则返回 true,否则返回 false。
map.delete(key) —— 删除指定键的值。
map.clear() —— 清空 map。
map.size —— 返回当前元素个数。
2.map的迭代方法
map.keys //获得所有的键
map.values//获得所有的值
map.entries//获取所有的map键值对
map.forEach(fun(value,key,map){})//这也是一种迭代
3.map和对象的转化
从obj对象数据转化为map所需要的数据格式
let obj = {
name: "John",
age: 30
};
let map = new Map(Object.entries(obj));
alert( map.get('name') ); // John
从map数据转化为创建对象的数据
let map = new Map();
map.set('banana', 1);
map.set('orange', 2);
map.set('meat', 4);
let obj = Object.fromEntries(map.entries()); // 创建一个普通对象(plain object)(*)
alert(obj.orange); // 2
4.普通对象和map最大的不同在于,map可以使用任何数据类型作为键值,而普通对象只能使用字符串作为键值。
map 比较两个键值像不像同使用的是Map 使用 SameValueZero 算法来比较键是否相等。它和严格等于 === 差不多,但区别是 NaN 被看成是等于 NaN。所以 NaN 也可以被用作键。这个算法不能被修改或者自定义。
5.Set 是一个特殊的类型集合 - “值的集合”(没有键),它的每一个值只能出现一次。
常用方法:
new Set(iterable) —— 创建一个 set,如果提供了一个 iterable 对象(通常是数组),将会从数组里面复制值到 set 中。
set.add(value) —— 添加一个值,返回 set 本身
set.delete(value) —— 删除值,如果 value 在这个方法调用的时候存在则返回 true ,否则返回 false。
set.has(value) —— 如果 value 在 set 中,返回 true,否则返回 false。
set.clear() —— 清空 set。
set.size —— 返回元素个数。
6.set的迭代方法
set.keys //获得所有的键
set.values//获得所有的值 同set.keys兼容map
set.entries//获取所有的[value,value]
set.forEach(fun(value,valueAg,map){})//这也是一种迭代
注意:在 Map 和 Set 中迭代总是按照值插入的顺序进行的,所以我们不能说这些集合是无序的,但是我们不能对元素进行重新排序,也不能直接按其编号来获取元素。
- WeakMap 是类似于 Map 的集合,它仅允许对象作为键,并且一旦通过其他方式无法访问它们,便会将它们与其关联值一 同删除。
WeakSet 是类似于 Set 的集合,它仅存储对象,并且一旦通过其他方式无法访问它们,便会将其删除。
它们都不支持引用所有键或其计数的方法和属性。仅允许单个操作。
WeakMap 和 WeakSet 被用作“主要”对象存储之外的“辅助”数据结构。一旦将对象从主存储器中删除,如果该对象仅被用作 WeakMap 或 WeakSet 的键,那么它将被自动清除。