在 ES6 以前,js 通过 Object 来实现键值对存储,自 ES6 开始,Map 是一种新的集合类型,为这门语言带来了真正的键值对存储机制,Map 大部分特性都能通过 Object 类型实现,但二者之间存在一些细微的差异。
1. Map实现了迭代器接口,与 Object 的一个主要的区别是,Map 会维护键值对的插入顺序,因此可以根据插入顺序执行迭代操作。
2. Object 的键只能是数值,字符串,symbol,而 Map 的键值可以是 js 的任何数据类型。
3. 给固定大小的内存,Map大概可以比Object多存储 50% 的键值对
4. 如果代码中涉及大量的插入操作,那么 Map 的性能更佳
5. 从大型 Object 和 Map 中查找键值对的性能差异较小,但如果只包含少量的键值对,则 Object 有时候速度更佳。在把 Object 当作数组使用的情况下,即,使用连续的整数作为属性,浏览器可以进行优化,在内存中使用更高效的布局,这对 Map 是不可能的。
6. 如果代码中涉及大量的删除操作,那么Map的性能更佳。