不过 Map 和 Object 有一些重要的区别,在下列情况中使用 Map 会是更好的选择:
Map | Object | |
---|---|---|
意外的键 | Map 默认情况不包含任何键。只包含显式插入的键。 |
一个 备注:虽然可以用 |
键的类型 | 一个 Map 的键可以是任意值,包括函数、对象或任意基本类型。 |
一个 Object 的键必须是一个 String 或是 Symbol 。 |
键的顺序 |
|
虽然
自 ECMAScript 2015 规范以来,对象的属性被定义为是有序的;ECMAScript 2020 则额外定义了继承属性的顺序。参见 OrdinaryOwnPropertyKeys
和
EnumerateObjectProperties 抽象规范说明。但是,请注意没有可以迭代对象所有属性的机制,每一种机制只包含了属性的不同子集。( |
Size | Map 的键值对个数可以轻易地通过 size 属性获取。 |
Object 的键值对个数只能手动计算。 |
迭代 | Map 是 可迭代的 的,所以可以直接被迭代。 |
备注:
|
性能 |
在频繁增删键值对的场景下表现更好。 |
在频繁添加和删除键值对的场景下未作出优化。 |
序列化和解析 |
没有元素的序列化和解析的支持。 (但是你可以使用携带 replacer 参数的 |
原生的由 原生的由 JSON 到 |