Set的初始化
ES6提供了新的数据结构Set,它类似于数组,但是成员的值是唯一的,没有重复的值。
Set是一个构造函数,用来生成Set数据结构。
上面的代码中Set通过实例的add方法来添加成员,结果表明Set不会添加重复的值。
除了使用add方法之外,Set还可以接受一个数组(或类似数组的对象)作为参数来初始化。
去除数组重复成员的方法
Set实例的属性和方法
(1)Set实例的属性:
| 属性名 | 说明 |
|---|---|
| Set.prototype.constructor | 构造函数,默认就是Set函数 |
| Set.prototype.size | 返回Set实例的成员总数 |
(2) Set实例的方法:
1、操作方法
| 方法名 | 说明 |
|---|---|
| add(value) | 添加一个值,返回Set结构本身 |
| delete(value) | 删除某个值,返回一个布尔值,表示删除是否成功 |
| has(value) | 判断某个值是不是Set的成员,返回一个布尔值 |
| clear() | 清除所有成员,没有返回值 |
操作方法使用示例
2、遍历方法
| 方法名 | 说明 |
|---|---|
| keys() | 返回键名的遍历器 |
| values() | 返回键值的遍历器 |
| entries() | 返回键值对的遍历器 |
| forEach(value, key) | 使用回调函数遍历,参数顺序为值,键 |
遍历方法使用示例
通过上面代码中entires方法遍历的返回值可以看出,Set结构的键名和键值是相同的,所以对于Set结构来说keys和values方法遍历是没有区别的。
Set结构的实例默认可遍历,它调用的默认遍历函数就是values方法。
这意味着,可以省略values方法,直接使用for...of遍历Set结构。
Map的初始化
ES6新增了Map数据结构,它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当做键。传统的Object结构提供了“字符串-值”的对应,而Map结构提供了“值-值”的对应,功能更加完善。
Map是一个构造函数,用来生成Map数据结构。
上面的代码中,使用set(key, value)方法为Map结构添加成员,而且这里的“键”可以是任何类型的值。
除了set方法之外,Map还可以接受一个数组作为参数,该数组的成员是一个个表示键值对的数组。
Map接受数组作为参数,实际是执行的下面的操作。
如果对一个键多次赋值,后面的值会覆盖前面的值。
如果读取一个不存在的键,将返回undefined。
注意:只有对同一个对象的引用,Map结构才将其视为同一个键,这一点要非常小心。
上面的代码中,set和get中的键名是一样,但是实际上是两个值,因为内存地址是不一样的,所以get方法无法读取该键,返回undefined。
要解决这种问题可以把键名是数组或对象的键用变量代替。
Map实例的属性和方法
(1)Map实例的属性:
| 属性名 | 说明 |
|---|---|
| Map.prototype.constructor | 构造函数,默认就是Map函数 |
| Map.prototype.size | 返回Map实例的成员总数 |
(2)Map实例的方法:
1、操作方法
| 方法名 | 说明 |
|---|---|
| set(key, value) | 设置key所对应的键值,返回Map结构本身 |
| get(key) | 读取key对应的键值,如果找不到key,返回undefined |
| delete(key) | 删除key对应的键和值,返回一个布尔值,表示删除是否成功 |
| has(key) | 判断某个键是不是Map的成员,返回一个布尔值 |
| clear() | 清除所有成员,没有返回值 |
操作方法使用示例
2、遍历方法
| 方法名 | 说明 |
|---|---|
| keys() | 返回键名的遍历器 |
| values() | 返回键值的遍历器 |
| entries() | 返回键值对的遍历器 |
| forEach(value, key) | 使用回调函数遍历,参数顺序为值,键 |
便利方法使用示例
Map结构的实例默认可遍历,它调用的默认遍历函数就是entries方法。
这意味着,可以省略entries方法,直接使用for...of遍历Map结构。
Map的forEach方法和数组的类似,可以对每个成员执行某种操作。