Map类型 是一个类似于对象的类型
—是ES6语法新增的数据类型(说是一个数据类型可能有点不正确,姑且这样说吧)
先要重新认识一下对象类型
对象类型的单元是键值对(属性=属性值)形式的单元
键名 = 数值 key = value
对象定义的任意键名,都会被转化为字符串形式。
-
如果给键名定义为数组,这个键名就是数组中的数据
let obj = { name : '张三', } const arr = [1,2,3]; //此处不用obj.arr 是由于 .语法不解析变量 []语法解析变量 obj[arr] = '数组'; console.log(obj); // 执行结果为 Object { name: "张三", "1,2,3": "数组" }
-
如果给键名定义为函数,这个键名是函数中定义的程序
let obj = { name : '张三', } const fun = function(){console.log('加油!')}; obj[fun] = '函数'; console.log(obj); // 执行结果为 Object { name: "张三", "function(){console.log('加油!')}": "函数" }
-
如果给键名定义为对象,这个键名是
[object Object]
let obj = {name : '张三'}; const newObj = {name : '李四'}; obj[newObj] = '对象'; console.log(obj); // 执行结果为 Object { name: "张三", "[object Object]": "对象" }
Map类型
可以把一个引用数据类型当做键值对的键名来使用
// 基本语法 new Map()
const m = new Map();
console.log(m);
// 执行结果为 Map(0)
Map类型的基本操作方法
-
在定义Map类型时赋值
- Map()中的参数,必须是一个数组
- 这个数组必须是一个二维数组 [[ ]]
- 二维数组中每一个数组中,必须有两个单元,一个单元是键值对的键名,一个是键值对的数据
- 每个二维数组中的数据,可以是任意的数据类型
const m = new Map([['name','张三'],[{a:100},'对象数据'],[[1,2,3],'数组数据'],[function(){console.log('加油!')},'函数数据']]); console.log(m); // 执行结果为 Map(4) { name → "张三", {…} → "对象数据", (3) […] → "数组数据", m() → "函数数据" }
-
添加单元 set()方法
-
参数1:单元的键名 如果不写成字符串形式,会定义为 key => name:参数 如果定义为字符串,是 key : 参数 定义的参数1,不能是变量
-
参数2: 单元的数值
const m = new Map(); m.set( {name:'a'} , 100); m.set('函数',function(){}); console.log(m); // 点开执行结果为 // Map(2) // size: 2 // <entries> // 0: {…} → 100 // <key>: {…} // name: "a" // <prototype>: Object { … } // <value>: 100 // 1: "函数" → function () // <prototype>: Object { … }
-
-
获取单元数据 get() 方法
-
参数就是定义的键名
-
不用管在Map集合中,看到的什么语法形式,只要get(键名)就能获取到对应的数据
const m = new Map([['name','张三']]); console.log(m); // 执行结果为 Map { name → "张三" } console.log(m.get('name')); // 执行结果为 张三
-
-
删除数据 delete() 方法
-
参数就是删除单元的键名
let a = {a:100}; const m = new Map([['name','张三'],[a,'对象属性']]); m.delete(a); console.log(m); // 执行结果为 Map { name → "张三" }
-
-
清除 clear() 方法
-
清除所有的键值对
let a = {a:100}; const m = new Map([['name','张三'],[a,'对象属性']]); m.clear(); console.log(m); // 执行结果为 Map(0)
-
-
判断 是否是map中的成员 has() 方法
-
let a = {a:100}; const m = new Map([['name','张三'],[a,'对象属性']]); console.log(m.has(a)); // 执行结果为 true console.log(m.has('name')); // 执行结果为 true
-
-
循环遍历用 forEach
-
let a = {a:100}; const m = new Map([['name','张三'],[a,'对象数据'],[[1,2,3],'数组数据'],[function(){console.log('加油!')},'函数数据']]); m.forEach(function(v,k){ console.log(v,k); }) // 执行结果为 // 张三 name // 对象数据 Object { a: 100 } // 数组数据 Array(3) [ 1, 2, 3 ] // 函数数据 function m()
-