Map和Obeject对比及实现自己的HashMap

本文探讨了JavaScript中的Map与Object的主要差异,包括Map的键类型更广泛,迭代顺序保持,以及在频繁增删操作时的性能优势。还介绍了Map对象的属性如size,以及方法如clear、delete、get、has和set。此外,文章提到了Map的迭代方式,如entries、keys、values和forEach,并强调了在迭代过程中的动态变化。最后,文章涉及了Object与Map的性能对比,并讨论了如何构造及还原Map,以及自定义HashMap的实现。
摘要由CSDN通过智能技术生成

Map 是一个键值对的集合,和 Object 类似。 Map 做为构造函数,可以通过全局对象获取到。需要
通过 new 操作创建实例对象,直接调用会报错。 Map 构造函数接收一个 iterable 类型的参数,用来初
始化 Map 。

var m1 = new Map([[1, '1'], ['hello', 'world']]); // Map(2) {1 => "1", "hello" => "world"}
 var m2 = Map(); // Uncaught TypeError: Constructor Map requires 'new'

和Object的差异
·Object 的 key 只能是字符串类型和 Symbol 类型, Map 的 key 可以是任意 javascript 类型
·Map 的 key 是有序的,迭代时按照插入 key 的顺序, Object 的 key 是无序的。es6 以后,Object 的 key 也是有序的了
·在频繁增删键值对的场景下, Map 的表现更好, Object 没有做优化

Map对象的属性
size:用来获取 Map 中的条目数量

Map对象的方法
clear:清空对象中的条目
delete:删除特定的条目
get:获取特定的条目
has:检测是否包含特定的条目
set:设置特定的条目,如果已经包含,就更新该条目

迭代Map对象
entries():返回包含 [key, value] 的迭代器
keys():返回包含 key 的迭代器
values():返回包含 value 的迭代器
forEach():传入迭代处理函数,遍历所有条目
for…of 循环:和 entries() 函数的表现类似,循环内部对迭代器做了处理

注意
迭代 Map 对象的过程中,新增的键值对可以被访问到。已经访问过的键值对,删除后再次添加进
来,会被再次访问。删除没有访问过的键值对,将不会被访问到。

Object和Map性能对比

 let obj = {
   }
        let map = new Map()
        let index = 97 + 26

        for(let i = 97; i < 97+26; i++){
   
            let key = String.fromCodePoint(i)
             //obj加key
            obj[key] = i
            // map加key
            map.set(key,1)
        }
        console.log(obj,map)

        // 对比性能
        console.time('obj')
        // 测试删除倒数第二个
        for(let key in obj)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值