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



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

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

  • 设置属性:dictionary.key = valuedictionary[key] = value

  • 获取属性:dictionary.keydictionary[key]

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

  • 设置参考:dictionary.set(key, value)

  • 获取参考:dictionary.get(key)

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

您可以在此处和此处使用jsperf自己对其进行测试。看起来结果取决于V8版本。

原理映射()是可变的键值商店,很可能[不保证]作为哈希地图实现。

另一方面相对于对象标头的偏移。对于一组固定的密钥,这效果很好(比哈图型比hashmaps更易用)。

如果JavaScript引擎检测到对象是否与某种特定形状不符,他们会更像是地图。

因此,一般指导将是:如果您提前知道键并且其数字不超过十二左右,则可以将其值设置为null,您可以使用对象。

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

最新更新