对象的key只能是字符串格式
1let obj = {
2 "1": "css",
3 1: "js", // 这里的 1 会被转成字符串 '1'
4};
5console.log(obj); // { '1': 'js' }
6
7// 如果想把对象obj做为key
8let dx = {
9 [obj]: "dancy",
10};
11console.log(dx); // { '[object Object]': 'dancy' }
12console.log(dx["[object Object]"]); // dancy
13console.log(dx[obj.toString()]); // dancy
Map类型可以把对象、函数、字符串、数值作为键名
1let map = new Map();
2map.set("str", "string");
3map.set(true, "boolean");
4map.set(function () {}, "function");
5map.set({}, 'object')
6map.set(1, "number");
7console.log(map); // {'str' => 'string', true => 'boolean', ƒ => 'function', {…} => 'object', 1 => 'number'}
1let map = new Map([
2 ["str", "string"],
3 [true, "boolean"],
4]);
5map
6 .set(function () {}, "function")
7 .set({}, "object")
8 .set(1, "number");
9console.log(map); // {'str' => 'string', true => 'boolean', ƒ => 'function', {…} => 'object', 1 => 'number'}
:::
1// set() 方法会向 Map 对象添加或更新一个指定的键值对。
2let map = new Map();
3map.set("str", "string");
4console.log(map); // {'str' => 'string'}
1// delete() 方法从该 map 中删除指定键的元素。
2let map = new Map([["str", "string"]]);
3console.log(map.delete("str")); // true
4console.log(map); // {}
5
6// clear() 方法会移除该 map 中的所有元素。
7let map = new Map([
8 ["str", "string"],
9 [true, "boolean"],
10]);
11console.log(map.clear()); // undefined
12console.log(map); // {}
1// 新增同名元素实现修改操作
2let map = new Map([["str", "string"]]);
3map.set("str", "ss");
4console.log(map.get("str")); // ss
1// get() 方法返回该 map 中的指定元素
2let map = new Map([["str", "string"]]);
3console.log(map.get("str")); // string
1// has() 方法返回一个布尔值,指示具有指定键的元素是否存在。
2let map = new Map([["str", "string"]]);
3console.log(map.has("str")); // true
:::
1// keys() 方法返回一个新的 map 迭代器 对象,该对象包含了此 map 中每个元素的键,按插入顺序排列。
2let map = new Map([
3 ["str", "string"],
4 [true, "boolean"],
5 [function () {}, "function"],
6 [{}, "object"],
7 [1, "number"],
8]);
9
10console.log(map.keys()); // { 'str', true, [Function (anonymous)], {}, 1 }
1// values() 方法返回一个新的 map 迭代器对象,该对象包含此 map 中每个元素的值,按插入顺序排列。
2let map = new Map([
3 ["str", "string"],
4 [true, "boolean"],
5 [function () {}, "function"],
6 [{}, "object"],
7 [1, "number"],
8]);
9
10console.log(map.values()); // { 'string', 'boolean', 'function', 'object', 'number' }
1// entries() 方法返回一个新的 map 迭代器 (en-US)对象,该对象包含了此 map 中的每个元素的 [key, value] 对,按插入顺序排列。
2let map = new Map([
3 ["str", "string"],
4 [true, "boolean"],
5 [function () {}, "function"],
6 [{}, "object"],
7 [1, "number"],
8]);
9
10console.log(map.entries()); // { [ 'str', 'string' ], [ true, 'boolean' ], [ [Function (anonymous)], 'function' ], [ {}, 'object' ], [ 1, 'number' ] }
1// for...of...
2let map = new Map([
3 ["str", "string"],
4 [true, "boolean"],
5 [function () {}, "function"],
6 [{}, "object"],
7 [1, "number"],
8]);
9
10for (let key of map.keys()) {
11 console.log(key);
12}
13
14for (let key of map.values()) {
15 console.log(key);
16}
17
18for (let [key, value] of map.entries()) {
19 console.log(key, value);
20}
1// forEach() 方法按插入顺序对该 map 中的每个键/值对执行一次提供的函数。
2let map = new Map([
3 ["str", "string"],
4 [true, "boolean"],
5 [function () {}, "function"],
6 [{}, "object"],
7 [1, "number"],
8]);
9
10map.forEach((value, key) => {
11 console.log(key, value);
12});
:::
1let map = new Map([
2 ["str", "string"],
3 [true, "boolean"],
4 [function () {}, "function"],
5 [{}, "object"],
6 [1, "number"],
7]);
8
9// 数据还原
10console.log([...map]);
11console.log([...map.entries()]);
12// 转数组
13console.log(...map);
14// 转换键
15console.log([...map.keys()]);
16// 转换值
17console.log([...map.values()]);
18
19// 获取值为 'boolean' 的数据
20const newArr = [...map].filter(([key, value]) => value === "boolean");
21console.log(...new Map(newArr).values())
1<!DOCTYPE html>
2<html lang="en">
3 <head>
4 <meta charset="UTF-8" />
5 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6 <title>Map</title>
7 </head>
8
9 <body>
10 <div name="html">hello html</div>
11 <div name="css">hello css</div>
12 <div name="javascript">hello javascript</div>
13 <script>
14 let map = new Map();
15 document.querySelectorAll("div").forEach((item) => {
16 map.set(item, {
17 content: item.getAttribute("name"),
18 });
19 });
20 map.forEach((config, ele) => {
21 console.log(config);
22 ele.addEventListener("click", function () {
23 alert(config.content);
24 });
25 });
26 </script>
27 </body>
28</html>
1<!DOCTYPE html>
2<html lang="en">
3 <head>
4 <meta charset="UTF-8" />
5 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6 <title>Map</title>
7 </head>
8
9 <body>
10 <form action="" onsubmit="return post()">
11 接受协议:
12 <input type="checkbox" name="agreement" error="请接受协议" />
13 我是学生:
14 <input type="checkbox" name="student" error="网站只对学生开放" />
15 <input type="submit" />
16 </form>
17 <script>
18 function post() {
19 let map = new Map();
20 let inputs = document.querySelectorAll("[error]");
21 inputs.forEach((item) => {
22 map.set(item, {
23 error: item.getAttribute("error"),
24 status: item.checked,
25 });
26 });
27 return [...map].every(([ele, config]) => {
28 config.status || alert(config.error);
29 return config.status;
30 });
31 }
32 </script>
33 </body>
34</html>