Map
Object VS Map
Map和Object都是映射,即是键值对的集合,它们有什么区别呢?
Object | Map | |
---|---|---|
默认值 | 每个Object实例都有一个原型,且原型上的键名可能会和自己对象上的键名冲突 | 默认不包含任何值,只有显式插入的值 |
键的类型 | String或者Symbol 注:可以使用其他类型的键名,但最终会隐式转化为字符串 |
任意 |
迭代性 | 不可迭代,需借助Object.entries()/Object.keys()/Object.values() | 可迭代(for entry of map/forEach) |
键值对数 | 手动计算 | size属性 |
创建一个Map实例
可以将一个二元数组(键值对)作为元素的数组传入构造函数,该数组内的元素会以数组顺序进行处理加入到映射对象中,如果存在相同的键,则按照FIFO(先进先出)原则,即后面会覆盖前面的。
const map = new Map([['key1','value1'],['key2','value2']]);
实例的属性和方法
属性/方法 | 描述 | 返回值 |
---|---|---|
map.size | 映射中键值对的数量 | 返回映射中键值对的数量 |
map.get(key) | 获取映射中指定键对应的值 | 返回指定键对应的值,如果不存在指定的键,则返回undefined |
map.set(key,value) | 新增或者编辑映射中的键值对 注:返回映射实例,因此可以通过点运算符进行连续操作 |
返回当前Map实例 |
map.has(key) | 检查映射中是否含有某个键 | 布尔值 |
map.delete(key) | 删除映射中的键值对 | 布尔值,表示是否删除成功 |
map.clear() | 清空映射,即删除所有键值对 | / |
map.forEach((value,key,map)=>{}[,context]) | 遍历 | / |
map.entries() | 遍历 | 返回一个以二元数组即键值对作为元素的可迭代对象 |
map.keys() | 遍历 | 返回一个以当前映射中所有键作为元素的可迭代对象 |
map.values() | 遍历 | 返回一个以当前映射中所有值作为元素的可迭代对象 |
应用
可用在条件判断中,参见
JavaScript 复杂判断的更优雅写法