未分类

ES6知识点梳理(3)

map

Object提供了“字符串-值”的对应,而map提供了“值-值”的对应,是一种更完善的Hash结构实现。

map可以接受一个数组作为参数,该数组的成员是一个个表示键值对的数组
eg:

1
2
3
4
5
6
var map = new map([["name","张三"],["title","Author"]]);
map.size // 2
map.has("name"); // true
map.get("name"); // 张三

//此代码在新建map实例时就指定了两个键(name和title)

对同一个键多次赋值,后面的值将覆盖前面的值,若是读取一个未知的值,返回undefined,当然了,只有对同一个对象的引用,map才将其视为同一个键
eg:

1
2
3
var 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)