Object与Map
在Es6之前,对象Object常常被用作map的功能,因为两者都可以实现按键存取一个值、删除键、检测一个键是否绑定了值。但是Object在使用上还是有一些不便之处,例如:
- 新增的键名可能会和Object原型链上的键名发生冲突。
- Object的键名只能是String和Symbol类型,事实上Symbol也是ES6新增的数据类型,因此在ES6之前,只能是String类型。
- Object键是无序的。
- Object键值对个数只能遍历计算,无法直接获取。
- …
map用法
Map 作为ES6新增的两个数据结构之一(另一个为Set),相信大家并不陌生,简单回顾一下其主要用法:
属性
Map.prototype.constructor
返回一个函数,它创建了实例的原型。默认是Map函数。
Map.prototype.size
返回Map对象的键/值对的数量。
方法
Map.prototype.clear()
移除Map对象的所有键/值对 。
Map.prototype.delete(key)
如果 Map 对象中存在该元素,则移除它并返回 true;否则如果该元素不存在则返回 false。随后调用 Map.prototype.has(key) 将返回 false 。
Map.prototype.entries()
返回一个新的 Iterator 对象,它按插入顺序包含了Map对象中每个元素的 [key, value] 数组。
Map.prototype.forEach(callbackFn[, thisArg])
按插入顺序,为 Map对象里的每一键值对调用一次callbackFn函数。如果为forEach提供了thisArg,它将在每次回调中作为this值。
Map.prototype.get(key)
返回键对应的值,如果不存在,则返回undefined。
Map.prototype.has(key)
返回一个布尔值,表示Map实例是否包含键对应的值。
Map.prototype.keys()
返回一个新的 Iterator对象, 它按插入顺序包含了Map对象中每个元素的键 。
Map.prototype.set(key, value)
设置Map对象中键的值。返回该Map对象。
Map.prototype.values()
返回一个新的Iterator对象,它按插入顺序包含了Map对象中每个元素的值 。
其中最基础的方法是 set get has delete (增查改),其他是一些遍历的方法。使用时先使用new构造一个Map实例,再通过相应的方法操作。
let myMap = new Map();
let keyObj = {
};
let keyFunc = function() {
};
let keyString = 'a string';
// 添加键
myMap.set(keyString, "和键'a string'关联的值");
myMap.set(keyObj, "和键keyObj关联的值");
myMap.set(keyFunc, "和键keyFunc关联的值");
myMap.size; // 3
// 读取值
myMap.