正如我在示例中看到的,~~
和Math.floor
的功能相同。他们两个都向下数字(我认为正确吗?)
另外我应该提一下,根据此测试,~~
比Math.floor
更快:jsperf.com/math-round-vs
所以我想知道,~~
和Math.floor
之间有什么区别吗?
答案 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