ES6中的数据结构Map

前言

小伙伴们大家好,前面我们已经学习了es6中的Set和WeakSet两种数据结构,今天将给大家分享es6为我们提供的另一种数据结构Map。

大家都知道在JavaScript的对象(Object)中,只能用字符串类型作为对象的key,即使我们在写的时候用了其它类型的key,那么Object也会自动把它转换为字符串类型。但有时候由于业务需要,我们想用一些其它类型来作为对象的key,比如说dom对象,这个时候Object显然已经无法满足我们的需求了,因为dom对象最终会被转换为字符串类型[object HTMLDivElement]。为了解决这个问题,ES6 为我们提供了 Map 数据结构。下面我们来具体分析。

Map

ES6中的Map数据结构类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构则提供了“值—值”的对应,是一种更完善的 Hash 结构实现。Map数据结构有如下一些特点:

  • Map是键值对的集合,键值不限于字符串,可以是任意数据类型
  • Map通过set方法添加成,通过get方法来获取成员
  • Map也是构造函数,也可以接受一个数组作为参数,但该数组的成员也必须是一个个表示键值对的数组。例如:[[“name”,“Alvin”],[“age”,18]]
  • 不仅仅是数组,任何具有 Iterator 接口、且每个成员都是一个双元素的数组的数据结构都可以当作Map构造函数的参数。包括Set和Map本身。
  • 如果对同一个键多次赋值,后面的值将覆盖前面的值
  • 如果读取一个不存在的键则返回undefined
  • 只有对同一对象的引用,Map才会视为同一个键。也就是说两个对象的内存地址是一样的,才会被视为是同一个键。(Map 的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键)
  • 如果Map的键值是一个基本类型(数字,字符串,布尔等),则只要两个值严格相等(类型和值都相等)才算是同一个键,如0和-0就是同一键,而true和"true"则是两个键
  • undefined 和 null是两个不同的键
  • NaN在Map中被视为同一个键

下面我们来看一些小案例

//1. 任意类型作为键名
//2. 通过set添加成员,get访问成员
const m = new Map();
const o = {
   "p": 'Hello World'};
m.set(o, 'content')
m.get(o) // "content"

//3. 数组作为构造函数的参数,且数组的成员必须也是包含了一个个表示键值对的数组
const map = new Map([
  ['name', 'Alvin'],
  ['age', 18]
]);
map.get("name");//"Alvin"
map.get('age') // 18

//4. Set和Map对象作为Map构造函数的参数
const set 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值