在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中,它们是否具有相同的性能?
答案 0 :(得分:1)
答案 1 :(得分:-1)
原则上,Maps()意味着可变的键值存储,并且[不保证]可以实现为哈希映射。
另一方面,javascript引擎将尝试根据对象的创建位置和方式派生对象形状(将它们视为特定类型对象的隐式类定义),并在固定时为其提供固定布局和特定键相对于对象标题的偏移量。对于一小组固定的密钥,这种方法效果很好(缓存比哈希映射更友好)。
如果javascript引擎检测到对象与某些特定形状不符,那么他们会将其更像是地图。
因此,一般指导原则是:如果您事先知道密钥并且其编号不超过十几个,并且您可以将其值设置为null
,则可以使用对象。< / p>
如果您正在处理数百个密钥或动态生成的密钥,请使用Map()