JavaScript Map 对象的理解与使用

本文介绍了JavaScript中的Map对象,它与Object的区别在于键可以是任意类型,并且键值对保持有序。Map提供了多种操作方法,适用于频繁增删场景。此外,还探讨了WeakMap,它的键必须是对象且为弱引用,无法遍历,适用于避免内存泄漏的场景。

Map

Map 对标的是 Object,是一种类似于对象的键值对数据结构
  • 不同于Object 的是Map 的键可以为任意类型的值(null 会被当做 undefined),而不仅仅为字符串
  • Map 的键值是有序的,可通过 size 获取长度
  • Map 在频繁增删键值对的场景下会有一些性能优势
let map = new Map([
    ["姓名", "张三"],
    ["年龄","18"],
    [null, null],
    [undefined, null]
])
// 类似于:
let obj = {
    '姓名': '张三',
    '年龄': 18,
    'null': null,
    'undefined': null
}
map.set(obj, 'new obj')
console.log(...map)

在这里插入图片描述

操作方法

方法/属性描述
size属性,获取当前Map对象的长度,同数组的 length
set(key,value)向当前Map对象中添加一个值,返回的Map对象,支持链式写法
get(key)通过key找到value(key为对象时,必须为同一对象的引用),如果找不到,返回undefined
delete(key)删除当前Map对象中的一个值,返回一个布尔值,表示是否删除成功
has(key)检测这个value是否是当前Map对象的一个元素,通过返回的布尔值表示
clear()清除当前Map对象所有元素,没有返回值

Map 遍历方法

方法/属性功能介绍
keys()返回该Set对象键名的遍历器
values()返回该Set对象键值的遍历器
entries()返回该Set对象键值对的遍历器
forEach()使用回调函数遍历该Set对象的每个元素,可以接受第二个参数,用来绑定this
for(let item of map.entries()) {
    console.log(item[0], item[1])
}
// 等同于

for(let [key, value] of map) {
    console.log(key, value)
}

map.forEach((value, key, map)=> {
    console.log(key, value)
})

输出结果

关于WeakMap

WeakMap数据结构是一种类似于Map的数据结构,不过键名必须为对象(null除外)
与Map的键名不同的是,WeakMap的键名都是弱引用。
因为键名都是对象的弱引用,所以随时都可能会被垃圾回收,因此是不能遍历的
WeakMap 没有size,也没有clear()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值