JavaScript 中的楼层数字:~~n、n|0 或 Math.floor(n)
Flooring numbers in JavaScript: ~~n, n|0 or Math.floor(n)?
我最近发现了一些其他方法来删除 JavaScript 中除 Math.floor(n)
以外的数值的小数部分,特别是双位 NOT 运算符~~n
并按位或 0 n|0
执行。
我想知道这些方法之间有什么区别,以及推荐一种方法而不是另一种方法的不同情况。
所有按位运算符的操作数都转换为有符号的 32 位整数:
Math.floor(2147483648) // 2147483648
2147483648 | 0 // 2147483648
~~2147483648 // 2147483648
Math.floor(2147483649) // 2147483649
2147483649 | 0 // -2147483647
~~2147483649 // -2147483647
所以使用 Math.floor();
下一个查看您的代码并使用 Math.floor()
的人要清楚。
1%-40% 的性能提升并不值得,所以不要让你的代码混乱和难以维护。
(
我完全同意josh的回答:赞成清晰的可维护代码。
以下是对其他按位方法的说明:
按位运算符之所以有效,是因为它们只对 32 位(有符号)整数进行运算符,但 JavaScript 中的数字都是 IEEE-754 值。因此,存在一个内部转换(截断,而不是底线!),它发生在按位运算符的操作数上。
应用的逐位运算(例如 n<<0
,~~n
或n|0
)则充当恒等函数,对转换后的值"不做任何事":也就是说,所有这些方法都依赖于应用于按位操作数的相同转换。
尝试n
为负数或 [-231, 231-1] 以外的值:
(-1.23|0) // -1
Math.floor(-1.23) // -2
var x = Math.pow(2, 40) + .5
x|0 // 0
Math.floor(x) // 1099511627776
快乐编码。
相关文章:
- Javascript Math.floor 函数失误或实现之谜
- Performance: toFixed() vs. Math.floor(x * 10000)
- 为什么当我们把Math.floor写成HTML angular时,它什么也不返回
- Javascript.我一添加math.floor函数,calc()函数就不起作用了
- 为什么Math.floor返回零
- Math.floor(Math.random()) +1 实际上做了什么
- JavaScript 中的楼层数字:~~n、n|0 或 Math.floor(n)
- TypeError: Math[“floor”] 不是一个函数
- Math.floor() 对我不起作用
- Math.floor math.random (+ min 在做什么)
- JavaScript:如何解释“Math.floor(Math.rrandom)”方法的变体
- Javascript 整数除法,或者 Math.floor(x) 等价于 x |0 表示 x >= 0
- Math.floor() and parseFloat() clash?
- "TypeError:Math.Floor不是HTMLButtonElement.onclick中加载的函数(
- Javascript:Math.floor 无法按预期工作
- 为什么n't Math.floor((Math.random() * 999999) + 100000)可靠地生
- JavaScript - Math.floor(Math.random()) -重新定位元素
- 为什么我要把Math.floor和Math.random结合起来
- var flip = Math.floor(Math.random() * (1 - 0 + 1)) + 0;?
- Javascript:我把Math.floor(Math.random)放在哪里?