正如我在示例中看到的那样,功能 if~~
和Math.floor
是相同的。他们都向下舍入一个数字(我认为正确吗?)
另外我应该提到,根据这个测试~~
比Math.floor
:jsperf.com/math-round-vs更快
~~
所以我想知道,和之间有什么区别Math.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
你也得到0
而不是NaN
,f.ex:
~~'a' == 0
Math.floor('a') == NaN
除了大卫回答:
关于 JavaScript 中的位运算,我注意到的一件事是它可以方便地处理较小的值,但并不总是适用于较大的值。出现这种情况的原因是按位运算符仅适用于可以完全以 32 位有符号格式表示的操作数。换句话说,使用按位运算只会产生介于 -2147483648 (-231) 到 2147483647 (231 – 1) 之间的数字。此外,如果使用的操作数之一超出该范围,则将使用数字的最后 32 位而不是指定的数字。
使用 Date 时很容易发现此限制,假设您正在四舍五入毫秒值:
Math.floor(1559125440000.6) // 1559125440000
~~1559125440000.6 // 52311552