我刚刚发现在 ES6 中有一个新的数学方法:Math.trunc
.
我在 MDN article 中阅读了它的描述。 , 听起来像使用 |0
.
此外,<<0
, >>0
, &-1
, ^0
也做类似的事情(感谢@kojiro 和@Bergi)。
经过一些测试,似乎唯一的区别是:
Math.trunc
返回 -0
区间中的数字 (-1,-0]
.位运算符返回 0
. Math.trunc
返回 NaN
与非数字。位运算符返回 0
. 是否有更多差异(在所有差异中)?
n | Math.trunc | Bitwise operators
----------------------------------------
42.84 | 42 | 42
13.37 | 13 | 13
0.123 | 0 | 0
0 | 0 | 0
-0 | -0 | 0
-0.123 | -0 | 0
-42.84 | -42 | -42
NaN | NaN | 0
"foo" | NaN | 0
void(0)| NaN | 0
最佳答案
Math.trunc(Math.pow(2,31))
怎么样与 Math.pow(2,31) | 0
对有符号的 32 位整数执行按位运算。因此,当您执行 Math.pow(2, 31) 时,您会以“10000000000000000000000000000000”位的形式获得此表示。因为这个数字必须转换为有符号的 32 位形式,所以我们现在在符号位的位置有一个 1。这意味着我们正在查看带符号的 32 位形式的 -eve 数字。然后,当我们对 0 进行按位或运算时,我们会以有符号的 32 位形式得到相同的结果。十进制是-2147483648。
旁注:在带符号的 32 位形式中,可以用二进制表示的小数范围是 [10000000000000000000000000000000, 0111111111111111111111111111111]。在十进制(以 10 为底)中,此范围为 [-2147483648, 2147483647]。
关于javascript - `Math.trunc` vs `|0` vs `<<0` vs `>>0` vs `&-1` vs `^0`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22156688/