Afs*_*ani 3 javascript math performance floor
正如我在示例中看到的,if ~~和的功能Math.floor相同。他们俩都向下舍入一个数字(我认为正确吗?)
我还要提一下,根据此测试,~~它比Math.floor:jsperf.com/math-round-vs更快
所以我想知道~~和之间有什么区别Math.floor吗?
是的,按位运算符通常不能很好地处理负数。外汇:
~~-6.8 == -6 // doesn’t round down, simply removes the decimals
Math.floor(-6.8) == -7
Run Code Online (Sandbox Code Playgroud)
而且您也得到0而不是NaN,例如:
~~'a' == 0
Math.floor('a') == NaN
Run Code Online (Sandbox Code Playgroud)
除了大卫的回答:
我注意到 JavaScript 中的按位运算的一件事是它可以方便地处理较小的值,但并不总是适用于较大的值。出现这种情况的原因是,按位运算符仅适用于可以完全以 32 位有符号格式表示的操作数。换句话说,使用按位运算只会产生 -2147483648 (-231) 到 2147483647 (231 – 1) 范围内的数字。此外,如果使用的操作数之一在该范围之外,则将使用数字的最后 32 位而不是指定的数字。
使用 Date 时很容易发现此限制,假设您对毫秒值进行四舍五入:
Math.floor(1559125440000.6) // 1559125440000
~~1559125440000.6 // 52311552
Run Code Online (Sandbox Code Playgroud)