66- 存储键集合的对象。
77- 存储有序集合的数组。
88
9- 但现实生活中远不止这些。这就是为什么 ` Map ` 和 ` Set ` 也存在的原因 。
9+ 但这还不足以应对现实情况。这就是为什么存在 ` Map ` 和 ` Set ` 。
1010
1111## Map
1212
13- [ Map] ( mdn:js/Map ) 是一个带键的数据集合,跟普通的 ` Object ` 一样。 但是它们最大的差别是 ` Map ` 允许键 (key)是任何类型 。
13+ [ Map] ( mdn:js/Map ) 是一个带键的数据项的集合,就像一个 ` Object ` 一样。 但是它们最大的差别是 ` Map ` 允许任何类型的键 (key)。
1414
1515它的方法和属性如下:
1616
1717- ` new Map() ` - 创建 ` Map ` 。
18- - ` map.set(key, value) ` - 存储键值对 。
19- - ` map.get(key) ` - 根据键来返回值,如果 ` key ` 不在 ` map ` 里将会返回 ` undefined ` 。
18+ - ` map.set(key, value) ` - 根据键存储值 。
19+ - ` map.get(key) ` - 根据键来返回值,如果 ` map ` 中不存在对应的 ` key ` ,则返回 ` undefined ` 。
2020- ` map.has(key) ` - 如果 ` key ` 存在则返回 ` true ` ,否则返回 ` false ` 。
2121- ` map.delete(key) ` - 根据键来删除值。
22- - ` map.clear() ` - 清空集合 。
23- - ` map.size ` - 返回当前的元素个数 。
22+ - ` map.clear() ` - 清空 ` Map ` 。
23+ - ` map.size ` - 返回当前元素个数 。
2424
2525举个例子:
2626
@@ -31,15 +31,21 @@ map.set('1', 'str1'); // 字符串键
3131map .set (1 , ' num1' ); // 数字键
3232map .set (true , ' bool1' ); // 布尔值键
3333
34- // 还记得普通的 Object 对象吗 ? 它会将键转化为字符串
35- // Map 则会保留类型 ,所以下面这两个结果不同:
34+ // 还记得普通的 Object 吗 ? 它会将键转化为字符串
35+ // Map 则会保留键的类型 ,所以下面这两个结果不同:
3636alert ( map .get (1 ) ); // 'num1'
3737alert ( map .get (' 1' ) ); // 'str1'
3838
3939alert ( map .size ); // 3
4040```
4141
42- 如我们所见,与对象不同,键不会转换为字符串。键可以是任何类型。
42+ 如我们所见,与对象不同,键不会被转换成字符串。键可以是任何类型。
43+
44+ ```smart header="` map[key] ` 不是使用 ` Map ` 的正确方式"
45+ 虽然 ` map[key] ` 也有效,例如我们可以设置 ` map[key] = 2 ` ,这样会将 ` map ` 视为 JavaScript 的 plain object,因此它暗含了所有相应的限制(没有对象键等)。
46+
47+ 所以我们应该使用 ` map ` 方法:` set ` 和 ` get ` 等。
48+ ```
4349
4450**Map 还可以使用对象作为键**
4551
0 commit comments