在我们日常开发过程中,哈希映射表(Hash Map)肯定是最常用的数据结构之一。它以键值对的形式存储数据,所以很容易通过键(Key)来获取对应的值(Value)。在 Java 中,可以明确的使用 HashMap 对象,但是在 Javascript 里,大家普遍默认使用的 Object 来作为 HashMap 使用:
const map = {
};
// 键值对
map['key1'] = 'value1';
map['key2'] = 'value2';
map['key3'] = 'value3';
// 检查 map 是否有 'key1' 属性
if (map.hasOwnProperty('key1')) {
console.log('Map contains key1');
}
// 获取 'key1' 属性对应的值
console.log(map['key1']);
但其实,Javascript 里也有内建的一种数据结构专门用来作为 HashMap 来使用:Map。Map 对象是 es6 的标准,因此在 es5 中要配合适当的 polyfill 来使用。不过不用担心,大部分现代浏览器都已经很好的支持了 Map 对象。
上面是 Map 对象在 MDN 中的列出的浏览器兼容性,可以看到,已经被微软抛弃的 IE11 部分支持,其他平台几乎都是完全支持,绝对可以放心食用。
下面我解释一下为什么要用 Map 而不是 Object。
键支持更丰富的数据类型
Object 的键只能是 Symbol 对象或者字符串。而 Map 可以使用任意数据类型作为键,甚至可以用 Object 或者 Function,只有想不到没有做不到:
const map = new Map();
const myFunction = (