JavaScript的对象(Object),本质上是键值对的集合(hash结构)
对象只能用字符串当作键,如果不是字符串,内部会调用toString()转为字符串
为了解决这一问题,es6提供了Map数据结构,这个构造函数
类似于对象,也是键值对的集合,但“键”的范围不限于字符串,键可以是任意数据类型
为了弥补object只能用字符串作为键(其他类型也会被内部转换为字符串)的缺点,es6提出了map构造函数,和object的区别在于map的键可以是任意类型。
size:成员数量(键值对的个数)
set(key,value):添加/修改,返回当前map对象本身
get(key):获取,读取key对应的键值,如果key不存在。返回undefined
has(key):key是否在Map()对象中,返回布尔值
delete(key):删除key,返回true,如果删除失败,返回false
clear():清空
代码示例:
const map = new Map()
map
.set(2022,"赚钱多多")
.set("target","脱单不脱发")
console.log(map.size) 2
console.log(map.get(2022)) 赚钱多多
console.log(map.get(2021)) undefined
console.log(map.has(2022)) true
console.log(map.has(2021)) false
console.log(map.has(2022)) true
console.log(map.has(2021)) false
map.clear()
console.log(map.size) 0
keys():返回键名的遍历器
values():返回键值的遍历器
entries():返回键值对的遍历器
forEach():遍历Map的所有成员
示例代码:
遍历整个map(键值对)
for(let item of map){ console.log(item) }
for(let [key,value] of map){ console.log(key,value) }
等同于
for(let item of map.entries){ console.log(item) }
遍历键
for(let item of map.keys()){ console.log(item) }
遍历值
for(let item of map.values()){ console.log(item) }
1. WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名。
2.WeakMap的键名所指向的对象,不计入垃圾回收机制。
3.都是键值对形式,WeakMap没有size
const map = new WeakMap();
map.set(1,2) 报错:无效的值作为了map的key
map.set(Symbol(),2) 报错:无效的值作为了map的key
map.set(null,2) 报错:无效的值作为了map的key
map.set([],{})
map.set(document,2022)
值没有要求,键有要求