在JavaScript中,Map 和 Object 看起来都是用键值对来存储数据,那么他们有什么不同呢?
不同点
Key filed
在 Object 中, key 必须是简单数据类型(整数,字符串或者是 symbol),而在 Map 中则可以是 JavaScript 支持的所有数据类型,也就是说可以用一个 Object 来当做一个Map元素的 key。
元素顺序
Map 元素的顺序遵循插入的顺序,而 Object 的则没有这一特性。
继承
Map 继承自 Object 对象。
新建实例
Object 支持以下几种方法来创建新的实例:
var obj = {...};
var obj = new Object();
var obj = Object.create(null);
Map 仅支持下面这一种构建方法:
var map = new Map([1, 2], [2, 3]); // map = {1 => 2, 2 => 3}
数据访问
Map 想要访问元素,可以使用 Map 本身的原生方法:
map.get(1) // 2
Object 可以通过 . 和 [ ] 来访问
obj.id;
obj['id'];
判断某个元素是否在 Map 中可以使用
map.has(1);
以及增删改查、迭代等
递归时的栈溢出问题
object会出现复杂递归的栈溢出问题。map不会