Map
ECMAScript 6以前,在JavaScript中实现“键/值”式存储可以使用Object 来方便高效地完成,也就是使用对象属性作为键,再使用属性来引用值。作为 ECMAScript 6 的新增特性,Map是一种新的集合类型,为这门语言带来了真正的键/值存储机制。Map的大多数特性都可以通过Object类型实现,但二者之间还是存在一些细微的差异。
const m = new Map()
API
set()
- 添加键值对,返回对象实例,可以链式调用
get()
- 获取指定的键值对,返回具体内容
has()
- 判断指定的键值对是否存在,返回 true 或 false
delete()
- 删除指定的键值对
clear()
- 清除该对象下所有键值对
entries()
- 获取键值对的迭代器(我没记错的话,好像symbol里也有这个属性)
keys()
- 获取键的迭代器
values()
- 获取值的迭代器
根据 map 的描述,可以看出 map 和 object 的使用上大体类似,那么什么时候使用 map,什么时候使用 object?
- 内存占用
不同浏览器的情况不同,但给定固定大小的内存,Map 大约可以比 Object 多存储50%的键/值对。 - 插入性能
两者差不多,但是如果一次性涉及大量插入操作,使用 Map 的性能更佳 - 查找速度
如果是内部键值对数量很多的 Object 和 Map,两者相差不多;少量键值对,Object 的速度优于 Map。但是如果一次性涉及大量查找操作,使用 Object 的性能更佳 - 删除性能
对大多数浏览器引擎来说,Map 的 delete() 操作都比插入和查找更快。如果涉及大量删除操作,使用 Map 更佳
WeakMap
Map 的弱映射
Set
ECMAScript 6新增的Set是一种新集合类型,为这门语言带来集合数据结构。Set在很多方面都像是加强的Map,这是因为它们的大多数API和行为都是共有的。
API
add()
- 增加值,返回操作实例,可链式调用
has()
- 查询值
size
- 取得元素数量
delete()
- 删除指定元素
clear()
- 删除所有元素
WeakSet
Set 的弱映射
迭代
在JavaScript中,计数循环就是一种最简单的迭代
循环是迭代机制的基础,这是因为它可以指定迭代的次数,以及每次迭代要执行什么操作。
生成器
生成器的形式是一个函数,函数名称前面加一个星号(*)表示它是一个生成器。
箭头函数不能用来定义生成器函数
标识生成器函数的星号不受两侧空格的影响
网友评论