JavaScript中Map的使用

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

语法

new Map([iterable])

iterable

Iterable 可以是一个数组或者其他 iterable 对象,其元素或为键值对,
或为两个元素的数组。 每个键值对都会添加到新的 Map。null 会被当做 undefined。

Objects 和 maps 的比较

ObjectMap 类似的是,它们都允许你按键存取一个值、删除键、检测一个键是否绑定了值。因此(并且也没有其他内建的替代方式了)过去我们一直都把对象当成 Map 使用。不过 MapObject 有一些重要的区别,在下列情况里 Map 会是更好的选择:

  • 一个对象的键只能是字符串或者 Symbols"Symbol()函数会返回symbol类型的值,该类型具有静态属性和静态方法。它的静态属性会暴露几个内建的成员对象;它的静态方法会暴露全局的symbol注册,且类似于内建对象类,但作为构造函数来说它并不完整,因为它不支持语法:"new Symbol()"。"),但一个 Map 的键可以是任意值,包括函数、对象、基本类型。
  • 你可以通过 size 属性直接获取一个 Map 的键值对个数,而 Object 的键值对个数只能手动计算。
  • Map 是可迭代的,而 Object 的迭代需要先获取它的键数组然后再进行迭代。
  • Object 都有自己的原型,所以原型链上的键名有可能和对象上的键名产生冲突。虽然 ES5 开始可以用 map = Object.create(null) 来创建一个没有原型的对象,但是这种用法不太常见。
  • Map 在涉及频繁增删键值对的场景下会有些性能优势。

实际使用

/**
 * map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
 * map() 方法按照原始数组元素顺序依次处理元素。
 * 注意: map() 不会对空数组进行检测。
 * 注意: map() 不会改变原始数组。
 */
var m = new Map([[1,"x"],[2,"y"],[3,"z"]]);

//返回Map对象的键/值对的数量。
console.log(m.size)
//map赋值
m.set("key","value")
//判断是否有值
m.has("bar"); // false
//返回键对应的值,如果不存在,则返回undefined。
m.get("key")
//移除任何与键相关联的值,并且返回该值,该值在之前会被Map.prototype.has(key)返回为true。
//之后再调用Map.prototype.has(key)会返回false。
m.delete("key")
//返回一个新的 Iterator对象, 它按插入顺序包含了Map对象中每个元素的键 。
m.keys();
//清空map中的值
m.clear();
for of 遍历map
for (var x of m){
    //遍历map
    console.log(x);
    console.log(x[0]);
    // test();
    // console.log(area_of_circle(3));
}
//Map的回调函数参数依次为value、key和map本身:
m.forEach(function(value,key,map){
    console.log('value='+value+',key='+key+',map='+map)
})
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文为阮一峰大神的《ECMAScript 6 入门》的个人版提纯! babel babel负责将JS高级语法转义,...
    Devildi已被占用阅读 2,042评论 0 4
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,267评论 0 13
  • 第一章:块级作用域绑定 块级声明 1.var声明及变量提升机制:在函数作用域或者全局作用域中通过关键字var声明的...
    BeADre_wang阅读 889评论 0 0
  • 大家好!我是一位两个孩子的普通妈妈,大的是儿子今年13岁,小的女儿,今年8岁。由于之前一直做生意,而忽略了对孩子的...
    481b17e2de02阅读 598评论 0 4
  • 1 “野蛮生长” P2P网贷公司从13年的800多家到2015年底的3464家,中国P2P市场在过去两年经历了不折...
    酸辣土豆丝v阅读 270评论 0 1