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方法和数组的类似,可以对每个成员执行某种操作。