时间:2021-05-18
本文介绍了es6 javascript的map数据结构,分享给大家,具体如下:
Map 结构的目的和基本用法
JavaScript 的对象( Object), 本质上是键值对的集合( Hash 结构), 但是传统上只能用字符串当作键。 这给它的使用带来了很大的限制。
上面代码原意是将一个 DOM 节点作为对象data的键, 但是由于对象只接受字符串作为键名, 所以element被自动转为字符串[object HTMLDivElement]。
为了解决这个问题, ES6 提供了 Map 数据结构。 它类似于对象, 也是键值对的集合, 但是“ 键” 的范围不限于字符串, 各种类型的值( 包括对象) 都可以当作键。 也就是说, Object 结构提供了“ 字符串— 值” 的对应, Map 结构提供了“ 值— 值” 的对应, 是一种更完善的 Hash 结构实现。 如果你需要“ 键值对” 的数据结构, Map 比 Object 更合适。
上面代码使用set方法, 将对象o当作m的一个键, 然后又使用get方法读取这个键, 接着使用delete方法删除了这个键。
作为构造函数, Map 也可以接受一个数组作为参数。 该数组的成员是一个个表示键值对的数组。
上面代码在新建 Map 实例时, 就指定了两个键name和title。
Map 构造函数接受数组作为参数, 实际上执行的是下面的算法。
var items = [ ['name', ' 张三 '], ['title', 'Author'] ]; var map = new Map(); items.forEach(([key, value]) => map.set(key, value));下面的例子中, 字符串true和布尔值true是两个不同的键。
如果对同一个键多次赋值, 后面的值将覆盖前面的值。
let map = new Map(); map .set(1, 'aaa') .set(1, 'bbb'); map.get(1) // "bbb"上面代码对键1连续赋值两次, 后一次的值覆盖前一次的值。
如果读取一个未知的键, 则返回undefined。
new Map().get('asfddfsasadf') // undefined注意, 只有对同一个对象的引用, Map 结构才将其视为同一个键。 这一点要非常小心。
上面代码的set和get方法, 表面是针对同一个键, 但实际上这是两个值, 内存地址是不一样的, 因此get方法无法读取该键, 返回undefined。
同理, 同样的值的两个实例, 在 Map 结构中被视为两个键。
var map = new Map(); var k1 = ['a']; var k2 = ['a']; map .set(k1, 111) .set(k2, 222); map.get(k1) // 111 map.get(k2) // 222上面代码中, 变量k1和k2的值是一样的, 但是它们在 Map 结构中被视为两个键。
由上可知, Map 的键实际上是跟内存地址绑定的, 只要内存地址不一样, 就视为两个键。 这就解决了同名属性碰撞( clash) 的问题, 我们扩展别人的库的时候, 如果使用对象作为键名, 就不用担心自己的属性与原作者的属性同名。
如果 Map 的键是一个简单类型的值( 数字、 字符串、 布尔值), 则只要两个值严格相等, Map 将其视为一个键, 包括0和 - 0。 另外, 虽然NaN不严格相等于自身, 但 Map 将其视为同一个键。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了ES6中Set和Map数据结构,Map与其它数据结构互相转换操作。分享给大家供大家参考,具体如下:ES6的Set:ES6提供了新的数据结构──Se
前言ES5中的数据结构,主要是用Array和Object。在ES6中主要新增了Set和Map数据结构。到目前为止,常用的数据结构有四种Array、Object、
本文实例讲述了ES6新数据结构Map功能与用法。分享给大家供大家参考,具体如下:新数据结构MapJavaScript中对象的本质是键值对的集合,但是键只能是字符
本文实例讲述了ES6学习笔记之Set和Map数据结构。分享给大家供大家参考,具体如下:一.SetES6提供了新的数据结构Set。类似于数组,只不过其成员值都是唯
JavaScript中循环语句不少,for、forin、forof和forEach循环,今天对比Array、Object、Set(ES6)、Map(ES6)四种