JavaScript的默认对象表示方式{}可以视为其他语言中的Map或Dictionary的数据结构,即一组键值对。
但是JavaScript的对象有个小问题,就是键必须是字符串。但实际上Number或者其他数据类型作为键也是非常合理的。
为了解决这个问题,最新的ES6规范引入了新的数据类型Map
Map #
初始化Map需要一个二维数组,或者直接初始化一个空Map
var map = new Map([['tom',18],['lucy',22],['lily',17]])
常用api #
var map = new Map([['tom',18],['lucy',22],['lily',17]])
//获取map的长度
map.size
//设置一个key-value,如果已经存在会覆盖value
map.set('james',25)
//判断是否存在一个key
map.has('lucy')
//根据key获取value
map.get('lucy')
//根据key删除
map.delete('tom')
//清空map
map.clear()
Set #
Set和Map类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。
要创建一个Set,需要提供一个Array作为输入,或者直接创建一个空Set
var set = new Set(['lucy','tom','james'])
常用api #
var set = new Set(['lucy','tom','james'])
//获取set的长度
set.size
//添加一个元素
set.add('lily')
//删除一个元素
set.delete('tom')
//清空
set.clear()
//判断是否存在元素
set.has('james')
iterable #
遍历Array可以采用下标循环,遍历Map和Set就无法使用下标。为了统一集合类型,ES6标准引入了新的iterable类型,Array、Map和Set都属于iterable类型。
具有iterable类型的集合可以通过新的for ... of循环来遍历,for ... of循环是ES6引入的新的语法
var set = new Set(['lucy','tom','james'])
for(name of set){
console.log(name)
}