javaScript之引用类型Map
一、作用
Map的作用
在JavaScript中,Map 是一种内置的引用类型,用于存储键值对(key-value pairs)的集合。与普通的对象(Object)不同,Map 允许任何类型的键(对象或原始值),并且键的顺序会被保留。以下是Map的一些主要作用:
1、任意类型的键:普通的JavaScript对象只接受字符串或Symbol作为键。然而,Map可以接受任何类型的键,包括函数、对象或其他原始类型。
const map = new Map();
map.set({foo: 'bar'}, 'some value');
2、键的顺序:Map保持键值对的插入顺序。这使得Map非常适合用于需要按照特定顺序迭代键值对的场景。
const map = new Map();
map.set('a', 1);
map.set('b', 2);
map.set('c', 3);
for (let [key, value] of map) {
console.log(key, value); // 输出: a 1, b 2, c 3
}
3、大小和迭代:Map 提供了一些方法,如 size 来获取Map中的键值对数量,以及 const map = new Map();
map.set('a', 1);
map.set('b', 2);
console.log(map.size); // 输出: 2
for (let key of map.keys()) {
console.log(key); // 输出: a, b
}
4、性能:在某些情况下,Map可能比普通的对象提供更好的性能,特别是在处理大量数据或需要频繁添加、删除键值对时。
5、易于检测:使用 instanceof 运算符可以很容易地检测一个变量是否是Map的实例,而普通的对象则没有这样的内置方法。
const map = new Map();
console.log(map instanceof Map); // 输出: true
由于这些特性和优势,Map 在许多场景中都非常有用,特别是在需要处理复杂数据结构或需要保持键值对插入顺序的场合。
二、方法
Map的方法
1、给实例设置一对键值对
set(key, value)方法,返回map实例
// 相同的属性名 会替换之前的属性
let map = new Map([[1, 2, 3], ['name', 'zs'],[{name:'账上'},{function() { }}]]);
map.set(4, 5);
console.log(map);
2、通过属性名获取属性值
get(key) 通过属性名获取属性值
let map = new Map([[1, 2, 3], ['name', 'zs'],[{name:'账上'},{function() { }}]]);
console.log(map.get(1)); // 2
console.log(map.get('name')); // zs
console.log(map.get({name:'账上'})); // undefined 因为指向的不是一个栈
3、删除指定的键值对
delete() 方法 删除指定的键值对
let map = new Map([[1, 2, 3], ['name', 'zs'],[{name:'账上'},{function() { }}]]);
console.log(map.delete(1));
console.log(map.delete({name:'账上'})); // false 因为指向的不是一个栈
console.log(map);
4、清除所有键值对
clear 清除所有键值对 返回值undefined
console.log(map.clear()); // undefined
console.log(map);
5、判断属性是否存在
has() 判断属性是否存在
console.log(map.has('name'));
6、返回实际的键值对
entries 返回实际的键值对
for (let [key, value] of map.entries()) {
console.log(key); // name {name: '账上'}...
console.log(value); // zs {function: ƒ}...
}
7、获取键与值
keys和values
for (let key of map.keys()) {
console.log(key);
}
for (let value of map.values()) {
console.log(value);
}
8、forEach 遍历
map.forEach((key, value) => {
console.log(key + ':' + value);
});
9、获取实例的成员
size 获取实例的成员
console.log(map.size); // 3
三、伴生结构-WeakMap
WeakMap其key值只能是引用类型的值
WeakMap和Map区别:
WeakMap不可遍历,没有size属性,entires keys values forEach没有
let wMap = new WeakMap([[{name: '战士'}, 2]]);
console.log(wMap);
wMap.set([4], 5);
console.log(wMap);