- 作者:老汪软件技巧
- 发表时间:2024-08-24 21:07
- 浏览量:
创建一个空Map
const map = new Map()
console.log(map)
上面代码可以看到Map 采用new 关键字进行创建
再看看控制台的打印:
可以看到 有个Entrites 属性 里面为空, size属性 值为0.
创建Entrites 有值, size 不为0的Map
const map = new Map(
[
['name', '小明'],
['age', 18]
]
)
console.log(map)
可以看到Map 接收一个二位数组, 二位数组中的第一个值将作为键值, 第二个值做为value。可以通过get 方法来获取值,
map 增删改查
查(get)
console.log(map.get('name'))
以上代码会在控制台打印出小明。
**增(set)**可以采用set 方法进行添加:
map.set('sex', '男')
console.log(map)
可以看到map 中多了sex =》 男
**删(delete)**可以使用delete 方法进行删除
map.set('sex', '男')
map.delete('age')
console.log(map)
可以看到age 被删除了
map 有哪些特点呢?
1. 键值唯一
const map = new Map(
[
['name', '小明'],
['age', 18]
]
)
map.set('sex', '男')
map.set('sex', '男')
console.log(map)
上面的代码我们添加了两次性别, 但是打印出来只看见一个
2. 键值可以是任意类型
const map = new Map(
[
[ { a: 1}, '对象'],
[ function () {}, '函数'],
[ [1, 2, 3], '数组'],
[ new Date(), '时间'],
[1, '数字'],
[Symbol(), 1],
[NaN, 1],
[undefined , 1],
[null , 1]
]
)
console.log(map)
可以看到上面的代码都正常的输出了结果。
3. map是可迭代的, 是有序的,按照new Map 和set的时候顺序排序,从上面的例子都可以看出来。
4. map 的内容是放在Entrites 下面的,和原型prototype 是隔离的
Map 和Object 的区别:
1. 内容装在Entries 上, Object 是原型上
2. 键值任意类型, Object 键类型只能是String 或者Symbol
3. size, Object 没有size
4. 可迭代, Object 不肯迭代,也就是不能拿for of
5. 增删改查方法不同, 底层有优化
6. map 不支持序列化和解析, Object 支持序列化和解析,也就是JSON.stringify 和JSON.parse
其他方法介绍:
clear 清空map
const map = new Map(
[
['name', '小明'],
['age', 18 ]
]
)
map.clear()
console.log(map)
结果:
has 判断键值存不存在
const map = new Map(
[
['name', '小明'],
['age', 18 ]
]
)
console.log(map.has('age'))
console.log(map.has('hello'))
结果:
entries 方法 返回一个可迭代的Entrites
结果:
可以调用这个方法做处理之后给map 做序列化
const map = new Map(
[
['name', '小明'],
['age', 18 ]
]
)
function replacer(key, value) {
if(value instanceof Map) {
return {
dataType: 'Map',
value: Array.from(value.entries()),
};
} else {
return value;
}
}
const res = JSON.stringify(map, replacer)
console.log(res)
结果:
values 方法和 keys 方法差不多,不做过多介绍。
forEach 方法遍历:
const map = new Map(
[
['name', '小明'],
['age', 18 ]
]
)
map.forEach((item, key, a ) => {
console.log(item, key,a)
})
结果:
可以看到 forEach 回调有三个参数, 第一个是value, 第二个是值, 第三个是map 本身。
Map 为什么要有增删改查的方法, 而不是用点去操作
1. 因为map 的内容是放在Entrites 下面的, 不是在原型上面