zoukankan      html  css  js  c++  java
  • JS-Map vs Object

    Map 对象保存键值对,任何值(对象或者原始值)都可以作为一个键或一个值。
    Map 语法 var map = new Map(iterable)  // iterable[可迭代的]   参数可以是一个数组或者其它的 iterable 对象,其元素为键值对(两个元素的数组,例如: [[ 1, 'one' ],[ 2, 'two' ]])。 每个键值对都会添加到新的 Map。null 会被当做 undefined。

    简单示例一:

    var map = new Map( [[ 1, 'one' ],[ 2, 'two' ]]);
    // Map(2) {1 => "one", 2 => "two"}
    map.size;  // 2
    typeof mm;  // "object"
    mm instanceof Map; // true

    错误写法示例:

    var ml = new Map([1,2]);
    // TypeError : Iterator value 1 is not an entry object
    
    var ms= new Map({name:'lili',age:13});
    // TypeError: #<Object> is not iterable
    
    var mls = new Map([{name:'lili',age:12},{name:'lucy',age:12}])
    // Map(1) {undefined => undefined}

    一个 Map 对象在迭代时会根据对象中元素的插入顺序来进行一个 for ... of 循环,在每次迭代后会返回一个形式为[key , value]的数组。

    Map 与 Object的区别:

    相同点:

    • 都允许按 键 存取一个值,删除键,检测一个键是否绑定了值

    不同点:

    Map 实例的方法

    1.   entries 返回一个新的 Iterator 对象,它按插入顺序包含了Map对象中每个元素的 [key, value] 数组
      var map = new Map([['name','lili'],['age',13],['sex','girl']]); // 注意:name age sex 必须加引号
      map.entries((ele)=>{console.log(ele)})

      map.keys()
    2. keys 返回一个新的 Iterator对象, 它按插入顺序包含了Map对象中每个元素的
      var map = new Map();
      map.set('name','LILI');
      map.set('age',12);
      map.set('hobby',['吃饭','睡觉','打豆豆']);
    3. get 返回键对应的值,如果不存在,则返回undefined
      var map = new Map();
      map.set('name','LILI');
      map.set('age',12);
      map.set('hobby',['吃饭','睡觉','打豆豆']);
      
      map.get('name') // 'LILI' //记得加引号
    4. set 设置Map对象中键的值。返回该Map对象。
      var map = new Map();
      map.set('name','LILI');
      map.set('age',12);
      map.set('hobby',['吃饭','睡觉','打豆豆']);
      // Map(3) {"name" => "LILI", "age" => 12, "hobby" => Array(3)}
    5. delete 如果 Map 对象中存在该元素,则移除它并返回 true;否则如果该元素不存在则返回 false
      var map = new Map();
      map.set('name','LILI');
      map.set('age',12);
      map.set('hobby',['吃饭','睡觉','打豆豆']);
      
      console.log(map)
      // Map(3) {"name" => "LILI", "age" => 12, "hobby" => Array(3)}
      
      map.delete('age')
      
      console.log(map)
      // Map(2) {"name" => "LILI", "hobby" => Array(3)}
    6. clear 移除Map对象的所有键/值对 。
      var map = new Map();
      map.set('name','LILI');
      map.set('age',12);
      map.set('hobby',['吃饭','睡觉','打豆豆']);
      
      map.clear()
      
      console.log(map)
      // Map(0) {}
    7. has   用来表明map 中是否存在指定元素, 返回一个bool值.
      var map = new Map();
      map.set('name','LILI');
      map.set('age',12);
      map.set('hobby',['吃饭','睡觉','打豆豆']);
      
      console.log(map.has('name'))
      // true
    8. forEach 按插入顺序,为 Map对象里的每一键值对调用一次callbackFn函数。如果为forEach提供了thisArg,它将在每次回调中作为this值
      var map = new Map();
      map.set('name','LILI');
      map.set('age',12);
      map.set('hobby',['吃饭','睡觉','打豆豆']);
      
      map.forEach((value,key,map)=>{
          console.log(key + ' = ' + value )
      })
      // name = LILI
      // age = 12
      // hobby = 吃饭,睡觉,打豆豆
    9. values  方法返回一个新的Iterator对象。它包含按顺序插入Map对象中每个元素的value值
      var map = new Map();
      map.set('name','LILI');
      map.set('age',12);
      map.set('hobby',['吃饭','睡觉','打豆豆']);
      
      // 0: "LILI"
      // 1: 12
      // 2: Array(3)
  • 相关阅读:
    第一周例行报告
    2018091-2 博客作业
    jQuery $.post $.ajax用法
    HTML ul、li 属性介绍
    PHP日期格式转时间戳
    php字符串与字符替换函数
    Linux内核参数
    ifconfig-dropped
    mysql_load_data及权限管理
    加快mysql导入导出速度
  • 原文地址:https://www.cnblogs.com/rose-sharon/p/11697117.html
Copyright © 2011-2022 走看看