在ecmascript 6中,我有两种定义字典的方法:
传统方法(使用dictionary = Object.create(null)
):
-
设置属性:
dictionary.key = value
或dictionary[key] = value
-
获取属性:
dictionary.key
或dictionary[key]
使用地图(与dictionary = new Map()
):
-
设置参考:
dictionary.set(key, value)
-
获取参考:
dictionary.get(key)
在V8中,它们是否提供相同的性能?
您可以在此处和此处使用jsperf自己对其进行测试。看起来结果取决于V8版本。
原理映射()是可变的键值商店,很可能[不保证]作为哈希地图实现。
另一方面相对于对象标头的偏移。对于一组固定的密钥,这效果很好(比哈图型比hashmaps更易用)。如果JavaScript引擎检测到对象是否与某种特定形状不符,他们会更像是地图。
因此,一般指导将是:如果您提前知道键并且其数字不超过十二左右,则可以将其值设置为null
,您可以使用对象。
如果要处理数百个键或动态生成的密钥,则使用Map()