~~和Math.floor()之间的区别

时间:2012-12-12 19:22:49

标签: javascript performance math floor

正如我在示例中看到的,~~Math.floor的功能相同。他们两个都向下数字(我认为正确吗?)

另外我应该提一下,根据此测试,~~Math.floor更快:jsperf.com/math-round-vs

所以我想知道,~~Math.floor之间有什么区别吗?

2 个答案:

答案 0 :(得分:6)

是的,按位运算符通常不能与负数一起使用。 f.ex:

~~-6.8 == -6 // doesn’t round down, simply removes the decimals

Math.floor(-6.8) == -7

你也得到0而不是NaN,f.ex:

~~'a' == 0

Math.floor('a') == NaN

答案 1 :(得分:0)

除了大卫回答:

  

我注意到的关于JavaScript中按位操作的一件事是,它对于较小的值可能很方便,但对于较大的值并不总是有效。出现这种情况的原因是,按位运算符仅对可以完全以32位有符号格式表示的操作数有效。换句话说,使用按位运算只会产生-2147483648(-231)到2147483647(231 – 1)范围内的数字。另外,如果使用的操作数之一超出该范围,则将使用数字的最后32位代替指定的数字。

使用日期时可以轻松找到此限制,假设您舍入了毫秒值:

Math.floor(1559125440000.6) // 1559125440000
~~1559125440000.6           // 52311552