JavaScript 双位非运算(~~ 操作符)使用场景实例探索
作者:南城FE
本文为大家介绍JavaScript中双位非运算 ~~, ~~ 操作符是一个强大且经常被忽视的特性,它提供了一种快速、简洁的方式来处理数字和执行类型转换,通常可以被用于数学计算和类型转换,我们先了解一下 ~~ 的基本概念和它的一些应用场景
~~ 操作符简介
在 JavaScript 中,~~
是双位非(bitwise NOT)操作符的双重使用。位非操作符 (~
) 将其操作数的所有位进行反转(即,1 变成 0,0 变成 1)。当你连续使用两次(如 ~~
),它会再次反转这些位,从而实际上返回原始值。
在给定表达式~foo
的情况下,其最终的效果是-(foo + 1)
。因此双位非操作~~foo
将导致-(-(foo + 1) + 1)
。这只适用于整数,给定所有可能的操作数,与~~
等价的真实的表达式可能是下面这样的,但真实的内部计算肯定不是这样:
typeof foo === 'number' && !isNaN(foo) && foo !== Infinity ? foo > 0 ? Math.floor(foo) : Math.ceil(foo) : 0;
下面是一些双位非运算的例子:
~~null; // => 0 ~~undefined; // => 0 ~~0; // => 0 ~~{}; // => 0 ~~[]; // => 0 ~~(1/0); // => 0 ~~false; // => 0 ~~true; // => 1 ~~1.2543; // => 1 ~~4.9; // => 4 ~~(-2.999); // => -2
当你正在处理正数,~~
的功能使其成为 Math.floor
的更好替代方案,虽然它的可读性不太好,但它速度更快且占用的字符更少。
应用场景
将浮点数转换为整数:
~~
可以用于快速将浮点数转换为整数。这种转换类似于Math.floor()
,但更简洁且在某些情况下性能更高。- 示例:
~~4.9
结果是4
。
处理非数值:
- 当对非数值(如字符串)使用
~~
时,JavaScript 会首先尝试将其转换为数字。如果转换失败,则结果为0
。 - 示例:
~~"hello"
结果是0
。
- 当对非数值(如字符串)使用
数据清洁和验证:
- 在处理用户输入或不确定的数据时,
~~
可以确保你最终得到一个整数,或者在无法转换的情况下得到0
。
- 在处理用户输入或不确定的数据时,
性能优化:
- 在一些性能敏感的应用中,
~~
作为一种快速的整数转换方法,可以提供比标准方法更快的性能。
- 在一些性能敏感的应用中,
结论
~~
运算符方法执行很快,当你执行数百万这样的操作非常适用,速度明显优于其他方法,但是代码的可读性比较差。还有一个需要要注意的地方,按位双非运算符方法仅适用于32位整数,即(2**31)-1 = 2147483647
。所以对于任何高于2147483647
的数字,按位运算符(~~
)都会给出错误的结果,所以在这种情况下建议使用Math.floor()
以上就是JavaScript 双位非运算(~~ 操作符)使用场景实例探索的详细内容,更多关于JavaScript双位非运算的资料请关注脚本之家其它相关文章!