map
Object提供了“字符串-值”的对应,而map提供了“值-值”的对应,是一种更完善的Hash结构实现。
map可以接受一个数组作为参数,该数组的成员是一个个表示键值对的数组
eg:1
2
3
4
5
6var map = new map([["name","张三"],["title","Author"]]);
map.size // 2
map.has("name"); // true
map.get("name"); // 张三
//此代码在新建map实例时就指定了两个键(name和title)
对同一个键多次赋值,后面的值将覆盖前面的值,若是读取一个未知的值,返回undefined,当然了,只有对同一个对象的引用,map才将其视为同一个键
eg:1
2
3var map = new map();
map.set(['a'],555);
map.get(['a']) // undefined 表面上针对同一个键,实际上是两个值,内存地址不同
如果map的键是一个简单类型的值(数字,字符串,布尔),则只要求两个值严格相等,map就将其视为一个键,包括0和-0。虽然NaN不严格等于自身,但map将其视为一个值
实例的属性和操作方法
size属性:返回map结构的成员总数
1.set(key,value)方法:设置key所在键值,然后返回整个map结构,如果key已经有值,则键值会被更新,否则新生成该键,返回map本身,因此可以使用链式调用
2.get(key)方法:读取key对应的键值,若找不到则返回undefined
3.has(key)方法返回一个布尔值,表示某个键是否在map数据结构中
4.delete(key)方法:删除指定键,成功返回true,反之返回false
5.clear()方法:清除所有成员,没有返回值
遍历方法
map提供3个遍历器生成函数和1个遍历方法
keys():返回一个键名的遍历器
values():返回一个键值的遍历器
entries():返回所有成员的遍历器
forEach():遍历map所有成员,与数组的forEach相似,forEach的第一个参数是函数,还可以传第二个参数,用于绑定this
与其他数据类型的转化
1.将map转为数组结构
方法:结合使用扩展运算符(…)
结合数组的map方法、filter方法,可以实现map的遍历和过滤(map本身没有map和filter方法)
2.数组转为map
方法:将数组传入map构造函数
3.map转为对象
如果map所有键都是字符串,则可以转为对象
WeakMap
WeakMap结构与map结构类似,唯一的区别是它只接受对象作为键名(对照WeakSet)