理解 JavaScript 中 Map 的基本概念与特性
掌握 Map 的创建方式及常用方法
了解 Map 相较于普通对象(Object)的优势
能够在实际开发中合理选择使用 Map 或 Object
Map 是 JavaScript 提供的一种用于存储键值对(key-value pairs)的数据结构,类似于其他编程语言中的哈希表(Hash Map)或字典(Dictionary)。
核心特性
保持插入顺序:Map 会按照元素被插入的顺序进行迭代。
支持任意类型的键和值:无论是原始类型(如字符串、数字)还是对象、函数,都可以作为键或值。
基于哈希实现:内部使用哈希机制,使得查找、插入和删除操作的平均时间复杂度为 O(1)。
键必须唯一:如果使用相同的键多次调用 set(),后一次的值会覆盖前一次的值。
适合高频增删场景:当需要频繁地添加或删除键值对时,推荐使用 Map 而非普通对象。
set()let myMap = new Map();
myMap.set('name', 'TechBlog');
myMap.set('age', 5);let anotherMap = new Map([
['name', 'TechBlog'],
['age', 5],
['city', 'Beijing']
]);
console.log(anotherMap);
// 输出: Map(3) { 'name' => 'TechBlog', 'age' => 5, 'city' => 'Beijing' }注意:传入的数组中每个元素必须是一个包含两个元素的数组(即
[key, value]形式)。
const myMap = new Map();
// 1. set()
myMap.set('name', 'TechBlog');
myMap.set('age', 25);
myMap.set(1, 'One');
console.log(myMap);
// Map(3) { 'name' => 'TechBlog', 'age' => 25, 1 => 'One' }
// 2. get()
console.log(myMap.get('name')); // "TechBlog"
console.log(myMap.get('invalidKey')); // undefined
// 3. has()
console.log(myMap.has('name')); // true
console.log(myMap.has('address')); // false
// 4. delete()
myMap.delete('age');
console.log(myMap.has('age')); // false
// 5. clear() 和 size
myMap.clear();
console.log(myMap.size); // 0
myMap.set('a', 1);
myMap.set('b', 2);
console.log(myMap.size); // 2建议:当你需要以非字符串作为键,或频繁进行增删操作时,优先使用
Map。
Map 是一种有序、高效的键值对集合,支持任意类型的键。
常用方法包括 set、get、has、delete、clear,以及只读属性 size。
相比普通对象,Map 在类型灵活性、性能和语义清晰性上更具优势。
在现代 JavaScript 开发中,Map 应被视为处理动态键值映射的首选工具之一。
为什么在需要以对象作为键的场景下,不能直接使用普通对象(Object),而必须使用 Map?
假设你需要缓存用户信息,且用户 ID 是一个复杂的对象(如 { id: 123, type: 'admin' }),你会如何设计这个缓存结构?为什么?
Map 的 size 属性和 Object.keys(obj).length 在使用上有何本质区别?哪种方式更可靠?