ES6 Map数据类型

定义:Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。

语法

new Map([iterable]);

参数
iterable
Iterable 可以是一个数组或者其他 iterable 对象,其元素为键值对(两个元素的数组,例如: [[ 1, ‘one’ ],[ 2, ‘two’ ]])。 每个键值对都会添加到新的 Map。null 会被当做 undefined。

属性
Map.length 属性 length 的值为 0 。

两种Map的格式

//定义Map第一种格式
{
  let map = new Map();
  let arr = ['123'];

  map.set(arr,456); //set()添加元素 注意和Set区分]
  //获取某一个元素使用 get()
  console.log('map',map,map.get(arr)); //{Array(1) => 456} 456
}
//定义Map第二种格式
{
  let map = new Map([['a',123],['b',456]]); //格式 key,value
  console.log('map args',map); // {"a" => 123, "b" => 456}
}

示例
使用Map对象

var myMap = new Map();
 
var keyObj = {},
    keyFunc = function () {},
    keyString = "a string";
 
// 添加键
myMap.set(keyString, "和键'a string'关联的值");
myMap.set(keyObj, "和键keyObj关联的值");
myMap.set(keyFunc, "和键keyFunc关联的值");
 
myMap.size; // 3
 
// 读取值
myMap.get(keyString);    // "和键'a string'关联的值"
myMap.get(keyObj);       // "和键keyObj关联的值"
myMap.get(keyFunc);      // "和键keyFunc关联的值"
 
myMap.get("a string");   // "和键'a string'关联的值"
                         // 因为keyString === 'a string'
myMap.get({});           // undefined, 因为keyObj !== {}
myMap.get(function() {}) // undefined, 因为keyFunc !== function () {}

Map常用属性和方法

//Map常用属性和方法
{
  let map = new Map([['a',123],['b',456]]); //格式 key,value
  //size
  console.log('size',map.size); // size 2
  //delete()
  console.log('delete',map.delete('a'),map); //{"b" => 456}
  //clear()
  console.log('delete',map.clear(),map); //{}
}

WeakMap与Map的区别

//1. WeakMap的数据类型只支持对象,WeakMap的对象是弱引用
//2. Map的一些属性和方法WeakMap是没有的
{
  let weakmap = new WeakMap();

  let o = {};
  weakmap.set(o,123);
  console.log(weakmap.get(o)); //123
}

Map遍历

//Map遍历
{
  //使用 for..of 方法迭代 Map

  let myMap = new Map();
  myMap.set(0,'zero');
  myMap.set(1,'one');
  console.log(myMap); //{0 => "zero", 1 => "one"}
  console.log(myMap.get(0)); //zero
  for(let [key,value] of myMap) {
    console.log(key + "=" + value); //  0=zero  1=one
  }
  // 将会显示两个log。一个是"0 = zero"另一个是"1 = one"

  for(let key of myMap.keys()) {
    console.log('key',key); 
    // 将会显示两个log。 一个是 "0" 另一个是 "1"
  }

  for(let value of myMap.values()) {
    console.log('value',value);
    // 将会显示两个log。 一个是 "zero" 另一个是 "one"
  }

  for(let [key,value] of myMap.entries()) {
    console.log(key + "=" + value);
    // 将会显示两个log。 一个是 "0 = zero" 另一个是 "1 = one"
  }

  //使用 forEach() 方法迭代 Map
  myMap.forEach((value,key) => { //vaule代表键值 key代表键名 按照参数顺序
    console.log(key + "=" + value);
    // 将会显示两个logs。 一个是 "0 = zero" 另一个是 "1 = one"
  })
  myMap.forEach((item) => { // item代表键值
    console.log(item);
    // 将会显示两个logs。 一个是 "zero" 另一个是 "one"
  })
}

将NaN作为Map的键
NaN 也可以作为Map对象的键。虽然 NaN 和任何值甚至和自己都不相等(NaN !== NaN 返回true),但下面的例子表明,NaN作为Map的键来说是没有区别的:

var myMap = new Map();
myMap.set(NaN, "not a number");

myMap.get(NaN); // "not a number"

var otherNaN = Number("foo"); //NaN
myMap.get(otherNaN); // "not a number"

参考链接:Map - JavaScript | MDN

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值