破译 JavaScript 中的 ~~ 运算符
在深入研究游戏物理库时,您可能遇到过神秘的 ~~ 运算符。它与 ~(按位 NOT)运算符的相似之处促使您质疑其功能。它只是一个双重否定,返回相同的值吗?
令人惊讶的是, ~~ 运算符实际上超越了其按位 NOT 的起源。它在 JavaScript 中有一个独特的用途:消除小数点后的所有内容。
小数点删除背后的原因
此行为源于操作数隐式转换为有符号 32执行按位运算之前的位整数。因此,~~ 运算符的行为如下:
function(x) { if(x < 0) return Math.ceil(x); else return Math.floor(x); }
但是,需要注意的是,此转换仅适用于输入值 (x) 落在 -(2^31) 到2^31 - 1. 超出这些边界会导致数据溢出,可能导致意外行为。
使用 ~~
的优点和缺点尽管它能够转换从字符串到数字,应谨慎使用 ~~,因为它容易溢出。此外,其预期目的与数值转换并不完全一致。相反,x 或 Number(x) 提供了更可靠和直观的选项。
按位 NOT 逻辑
理解为什么 ~~ 充当 32 位的双重否定整数,让我们考虑二进制 -43.2:
这种双重否定有效地将数据“反转”到小数截断之前的初始状态。
以上是## JavaScript 中的 ~~ 运算符有什么作用?的详细内容。更多信息请关注PHP中文网其他相关文章!