object.property 和 map.get(对象)之间的性能

performance between object.property and map.get(object)

在 ECMAScript 6 中,我有两种定义字典的方法:

传统方法(dictionary = Object.create(null)):

使用地图(dictionary = new Map()):

在 V8 中,它们提供相同的性能吗?

您可以在 here and here 使用 JSPerf 自行测试。看起来结果因 V8 版本而异。

原则上 Maps() 是可变的 key-value 存储,并且很可能 [不保证] 作为散列映射实现。

另一方面,javascript 引擎将尝试派生 object 形状(将它们视为特定类型 object 的隐式 class 定义)基于object 的创建位置和方式,并为它们提供固定布局,其中特定键相对于 object header 具有固定偏移量。这适用于一小部分固定键集(cache-friendlier 比 hashmaps)。

如果 javascript 引擎检测到 object 不符合某些特定形状,他们会将其视为地图。

所以一般指导是:如果您提前知道密钥并且它们的数量不超过十几个,您可以预先将它们的值设置为 null 您可以使用 objects.

如果您要处理数百个密钥或动态生成的密钥,请使用 Map()