代码之家  ›  专栏  ›  技术社区  ›  Mark Bolusmjak

为什么Javascript的Math.floor是Javascript中计算floor最慢的方法?

  •  25
  • Mark Bolusmjak  · 技术社区  · 16 年前


    http://ernestdelgado.com/archive/benchmark-on-the-floor/

    这表明 Math.floor 是Javascript中计算楼层最慢的方法。 ~~n , n|n , n&n
    这似乎相当令人震惊,因为我预计在当今的现代浏览器中实现Javascript的人将是一些相当聪明的人。

    地板做了其他方法做不到的重要事情吗?有什么理由用它吗?

    2 回复  |  直到 16 年前
        1
  •  27
  •   Robert Harvey    16 年前

    它与现代浏览器无关。它与执行ECMA标准有关。即使有更快的方法,你也不能仅仅改变某个函数的执行方式。它可能会破坏现有的代码。

    数学。地板必须考虑处理不同类型的许多不同场景。他们能像你所描述的那样走捷径,让不同的场景变得更快吗?也许他们可以,但这可能打破了其他的局面。表面上的东西看起来很小,并不意味着下面就没有冰山。

        2
  •  33
  •   Matthew Crumley    14 年前

    Math.floor 数学地板

    但更重要的是,正如一些评论中提到的, 其他方法是不等价的 . 它们都是通过进行位运算来工作的。位运算符通过截断数字自动将其操作数转换为32位整数。如果这个数字是32位的话就可以了,但是JavaScript数字是64位的浮点数,可能比2147483647大得多。

    数学地板 总是四舍五入。例如, Math.floor(-2.1) === -3 (-2.1) | (-2.1) === -2 .

    如果你 知道 您只需要处理小于2147483648的正数,并且需要在旧浏览器中压缩代码的每一点性能(首先确保它实际上是瓶颈)。可能不是,我会用一个更简单的方法: x|0 . 它不会对变量求值两次,即使 x 是一个表达式(请确保将它放在括号中,这样就不会遇到优先级问题)。