JavaScript Map
Map 保存键值对,其中键可以是任何数据类型。
Map 会记住键的原始插入顺序。
Map 提供表示映射大小的属性。
Map 方法
| 方法 | 描述 | 
|---|---|
| new Map() | 创建新的 Map 对象。 | 
| set() | 为 Map 中的键设置值。 | 
| get() | 获取 Map 对象中键的值。 | 
| clear() | 从 Map 中移除所有元素。 | 
| delete() | 删除由某个键指定的 Map 元素。 | 
| has() | 如果键存在于 Map 中,则返回 true。 | 
| forEach() | 为 Map 中的每个键/值对调用回调函数。 | 
| entries() | 返回迭代器对象,其中包含 Map 中的 [key, value] 键值对。 | 
| keys() | 返回迭代器对象,其中包含 Map 中的键。 | 
| values() | 返回迭代器对象,其中包含 Map 中的值。 | 
| 属性 | 描述 | 
|---|---|
| size | 返回 Map 元素的数量。 | 
如何创建 Map
您可以通过以下方式创建 JavaScript 映射:
- 将数组传递给 new Map()
- 创建映射并使用 Map.set()
new Map()
您可以通过将数组传递给 new Map() 构造函数来创建 Map:
实例
// 创建一个 Mapconst fruits = new Map([ ["apples", 500], ["bananas", 300], ["oranges", 200]]);
Map.set()
例子 1
您也可以使用 set() 方法将元素添加到 Map 中:
// 创建一个 Mapconst fruits = new Map();// 设置 Map 的值fruits.set("apples", 500);fruits.set("bananas", 300);fruits.set("oranges", 200);例子 2
set() 方法还可用于更改现有的 Map 值:
fruits.set("apples", 500);Map.has()
例子 1
如果 Map 中存在键,则 has() 方法返回 true:
fruits.has("apples");例子 2
请试试这个:
fruits.delete("apples");fruits.has("apples");Map 是对象
例子 1
typeof 返回 object:
// 返回 object:typeof fruits;
例子 2
instanceof Map 返回 true:
// 返回 true:fruits instanceof Map;
JavaScript Object 对比 Map
JavaScript 对象与映射之间的差异:
| Object(对象) | Map(映射) | 
|---|---|
| 不可直接迭代 | 可直接迭代 | 
| 无 size 属性 | 有 size 属性 | 
| 键必须是字符串(或符号) | 键可以是任何数据类型 | 
| 键不排序 | 键按插入排序 | 
| 有默认键 | 没有默认键 | 
Map.forEach()
forEach() 方法为 Map 中的每个键/值对调用回调:
实例
// 列出所有条目let text = "";fruits.forEach (function(value, key) {  text += key + ' = ' + value;})Map.entries()
entries() 方法返回一个带有 Map 中 [key,values] 的迭代器对象:
实例
// 列出所有条目let text = "";for (const x of fruits.entries()) {  text += x;}Map.keys()
keys() 方法返回一个迭代器对象,其中包含 Map 中的键:
实例
// 列出所有键let text = "";for (const x of fruits.keys()) {  text += x;}Map.values()
例子 1
values() 方法返回一个迭代器对象,其中包含 Map 中的值:
// 列出所有值let text = "";for (const x of fruits.values()) {  text += x;}例子 2
您可以使用 values() 方法对 Map 中的值求和:
// 对所有值求和let total = 0;for (const x of fruits.values()) {  total += x;}将对象用作键
例子 1
能够将对象用作键是 Map 的一项重要特性。
// 创建对象const apples = {name: 'Apples'};const bananas = {name: 'Bananas'};const oranges = {name: 'Oranges'};// 创建 Mapconst fruits = new Map();// Add new Elements to the Mapfruits.set(apples, 500);fruits.set(bananas, 300);fruits.set(oranges, 200);例子 2
请记住:键是对象(apples),而不是字符串(“apples”):
fruits.get("apples");  // 返回 undefinedBrowser Support
所有浏览器都支持 JavaScript 映射,除了 Internet Explorer :
| Chrome | Edge | Firefox | Safari | Opera | 
|---|---|---|---|---|
| 支持 | 支持 | 支持 | 支持 | 支持 |