new Map()
是 JavaScript 中用于創建 Map 對象 的構造函數。Map
是一種鍵值對集合,類似于普通對象(Object
),但有以下區別:
1. Map 的特點
1.1 鍵的類型
- Map:鍵可以是任意類型(包括對象、函數、基本類型等)。
- Object:鍵只能是字符串或 Symbol。
1.2 順序
- Map:鍵值對按照插入順序排列。
- Object:鍵的順序不一定與插入順序一致。
1.3 大小
- Map:可以通過
size
屬性直接獲取鍵值對的數量。 - Object:需要手動計算鍵的數量。
1.4 性能
- Map:在頻繁增刪鍵值對的場景下,性能優于
Object
。 - Object:在靜態鍵值對的場景下,性能優于
Map
。
2. Map 的基本用法
2.1 創建 Map
const map = new Map();
2.2 添加鍵值對
使用 set(key, value)
方法添加鍵值對。
map.set('name', 'Alice');
map.set(1, 'One');
map.set({ key: 'obj' }, 'This is an object');
2.3 獲取值
使用 get(key)
方法獲取值。
console.log(map.get('name')); // 輸出: "Alice"
console.log(map.get(1)); // 輸出: "One"
2.4 檢查鍵是否存在
使用 has(key)
方法檢查鍵是否存在。
console.log(map.has('name')); // 輸出: true
console.log(map.has('age')); // 輸出: false
2.5 刪除鍵值對
使用 delete(key)
方法刪除鍵值對。
map.delete('name');
console.log(map.has('name')); // 輸出: false
2.6 獲取鍵值對數量
使用 size
屬性獲取鍵值對數量。
console.log(map.size); // 輸出: 2
2.7 清空 Map
使用 clear()
方法清空所有鍵值對。
map.clear();
console.log(map.size); // 輸出: 0
3. 遍歷 Map
3.1 遍歷鍵
使用 keys()
方法獲取所有鍵。
for (const key of map.keys()) {console.log(key);
}
3.2 遍歷值
使用 values()
方法獲取所有值。
for (const value of map.values()) {console.log(value);
}
3.3 遍歷鍵值對
使用 entries()
方法獲取所有鍵值對。
for (const [key, value] of map.entries()) {console.log(`${key}: ${value}`);
}
3.4 使用 forEach
遍歷
map.forEach((value, key) => {console.log(`${key}: ${value}`);
});
4. Map 的常見使用場景
4.1 存儲復雜鍵
當鍵是對象或函數時,Map
是更好的選擇。
const objKey = { id: 1 };
const funcKey = () => {};const map = new Map();
map.set(objKey, 'This is an object key');
map.set(funcKey, 'This is a function key');console.log(map.get(objKey)); // 輸出: "This is an object key"
console.log(map.get(funcKey)); // 輸出: "This is a function key"
4.2 維護插入順序
當需要維護鍵值對的插入順序時,Map
是更好的選擇。
const map = new Map();
map.set('a', 1);
map.set('b', 2);
map.set('c', 3);for (const [key, value] of map) {console.log(`${key}: ${value}`);
}
// 輸出:
// a: 1
// b: 2
// c: 3
4.3 緩存數據
Map
可以用于緩存數據,鍵可以是任意類型。
const cache = new Map();function getData(key) {if (cache.has(key)) {return cache.get(key);}const data = fetchDataFromServer(key); // 假設從服務器獲取數據cache.set(key, data);return data;
}
5. Map 與 Object 的對比
特性 | Map | Object |
---|---|---|
鍵的類型 | 任意類型 | 字符串或 Symbol |
鍵的順序 | 插入順序 | 不一定 |
大小 | 通過 size 屬性獲取 | 需要手動計算 |
性能 | 頻繁增刪時性能更好 | 靜態鍵值對時性能更好 |
默認鍵 | 無 | 有原型鏈上的默認鍵 |
6. 總結
new Map()
用于創建鍵值對集合,支持任意類型的鍵,并維護插入順序。- 適用場景:
- 需要復雜鍵(如對象、函數)。
- 需要維護插入順序。
- 需要頻繁增刪鍵值對。