JavaScript中Map类型

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类型的基本操作方法

  1. 在定义Map类型时赋值

    1. Map()中的参数,必须是一个数组
    2. 这个数组必须是一个二维数组 [[ ]]
    3. 二维数组中每一个数组中,必须有两个单元,一个单元是键值对的键名,一个是键值对的数据
    4. 每个二维数组中的数据,可以是任意的数据类型
    const m = new Map([['name','张三'],[{a:100},'对象数据'],[[1,2,3],'数组数据'],[function(){console.log('加油!')},'函数数据']]);
    console.log(m);
    // 执行结果为 Map(4) { name → "张三", {…} → "对象数据", (3) […] → "数组数据", m() → "函数数据" }
    
  2. 添加单元 set()方法

    1. 参数1:单元的键名 如果不写成字符串形式,会定义为 key => name:参数 如果定义为字符串,是 key : 参数 定义的参数1,不能是变量

    2. 参数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 { … }
      
  3. 获取单元数据 get() 方法

    1. 参数就是定义的键名

    2. 不用管在Map集合中,看到的什么语法形式,只要get(键名)就能获取到对应的数据

      const m = new Map([['name','张三']]);
      console.log(m);
      // 执行结果为 Map { name → "张三" }
      console.log(m.get('name'));
      // 执行结果为 张三
      
  4. 删除数据 delete() 方法

    1. 参数就是删除单元的键名

      let a = {a:100};
      const m = new Map([['name','张三'],[a,'对象属性']]);
      m.delete(a);
      console.log(m);
      // 执行结果为 Map { name → "张三" }
      
  5. 清除 clear() 方法

    1. 清除所有的键值对

      let a = {a:100};
      const m = new Map([['name','张三'],[a,'对象属性']]);
      m.clear();
      console.log(m);
      // 执行结果为 Map(0)
      
  6. 判断 是否是map中的成员 has() 方法

    1. let a = {a:100};
      const m = new Map([['name','张三'],[a,'对象属性']]);
      console.log(m.has(a));
      // 执行结果为 true
      console.log(m.has('name'));
      // 执行结果为 true
      
  7. 循环遍历用 forEach

    1. 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()
      
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值