Javascript双重否定运算

本文介绍了JavaScript中的双位NOT运算符,如何将非数字类型转换为0,以及它在规范化整数参数和Array.prototype.indexOf方法中的应用,尽管可读性较差,但有望成为JS领域的常用技术。
摘要由CSDN通过智能技术生成

双位  NOT(~~)

按位运算符 ~~ 表示否定:

~~something;

 按位NOT运算符(~)将获取其操作数,将其转换为 32 位整数,并将反转每个位,例如:

00000000000000000000000000001001
...becomes
11111111111111111111111111110110

如果操作数是一个数字,并且它不是 NaN 或者 Infinity 那么~~具有将其四舍五入为零的效果(Math.ceil表示负数,Math.floor表示正数)。如果它不是数字,那么内部函数会将其转换为零。

以下是双位 NOT 操作的一些示例:

~~null;      // => 0
~~undefined; // => 0
~~0;         // => 0
~~{};        // => 0
~~[];        // => 0
~~(1/0);     // => 0
~~false;     // => 0
~~true;      // => 1
~~1.2543;    // => 1
~~4.9;       // => 4
~~(-2.999);  // => -2

~~的地板功能(flooring )使其成为更好的选择,如果您知道自己正在处理正数——它速度更快,占用的字符更少。虽然它的可读性不太好,但我希望它能慢慢成为 JS 领域非常知名的技术,这样我们都可以使用它而不必担心受到指责。Math.floor~~

这对于规范化您期望为整数的参数非常有用。以 MDC 建议提供给不支持的浏览器为例:

/*Array.prototype.indexOf = function...*/
var from = Number(arguments[1]) || 0;  
from = (from < 0)  
     ? Math.ceil(from)  
     : Math.floor(from);

/* 在去:~~ */

/*Array.prototype.indexOf = function...*/
var from = ~~arguments[1];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.怪兽

希望大家能够多多支持,我会继续

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值