Javascript:正在阅读ES6 Map.size常量时间?

时间:2016-12-14 09:48:37

标签: javascript dictionary hashmap ecmascript-6 time-complexity

获取对象的大小通常包括迭代和计数,或者Object.keys(obj).length,它也是O(n)。如果我切换到Map,我可以假设Map.size在O(1)中运行吗?

我对Javascript很新,来自C ++世界,我很震惊,我找不到一个标准来规定语言提供的所有功能的时间复杂性。

1 个答案:

答案 0 :(得分:2)

除了您已经检查过源代码或凭经验证明它的实现外,您无法依赖它。 The specification表明Map.prototype.size是一个带循环逻辑的getter:

  

获取Map.prototype.size

     

Map.prototype.size是一个访问器属性,其set访问器函数为 undefined 。它的get访问器函数执行以下步骤:

     
      
  1. M 值。
  2.   
  3. 如果 Type M )不是Object,则抛出TypeError异常。
  4.   
  5. 如果 M 没有[[MapData]]内部插槽,则抛出TypeError异常。
  6.   
  7. 条目成为 M ' s [[MapData]]内部广告位的值。
  8.   
  9. 计数为0。
  10.   
  11. 对于每个记录{[[Key]],[[Value]]} p ,它是条目的元素      
        
    • 如果 p 。[[Key]]不为空,请将 count 设置为 count +1。
    •   
  12.   
  13. 返回计数
  14.   

但是如果size的语义不变,那么实现可以自由优化。