你不知道的js中卷----字位截除

字位截除

一些开发人员使用

~~

来截除数字值的小数部分,以为这和

Math.floor(..)

的效果一样,

实际上并非如此。

~~

中的第一个

~

执行

ToInt32

并反转字位,然后第二个

~

再进行一次字位反转,即将所有

字位反转回原值,最后得到的仍然是

ToInt32

的结果。

~~

!!

很相似,我们将在

4.3.3

节中介绍。

~~

我们要多加注意。首先它只适用于

32

位数字,更重要的是它对负数的处理与

Math.

floor(..)

不同。

Math.floor( -49.6 ); // -50

~~-49.6; // -49

~~x

能将值截除为一个

32

位整数,

x | 0

也可以,而且看起来还更简洁。

出于对运算符优先级(详见第

5

章)的考虑,我们可能更倾向于使用

~~x

~~1E20 / 10; // 166199296

1E20 | 0 / 10; // 1661992960

(1E20 | 0) / 10; // 166199296

我们在使用

~

~~

进行此类转换时需要确保其他人也能够看得懂。

发布了235 篇原创文章 · 获赞 88 · 访问量 44万+

猜你喜欢

转载自blog.csdn.net/qq_34629352/article/details/105318863