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()

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

被折叠的 条评论
为什么被折叠?



