如何使用“~”运算符?

24

我无法通过谷歌搜索~运算符来了解更多信息。请有人用简单的话解释一下它是干什么的以及如何使用它?


一个更好的学习它的地方是Google Tech Talk,然后搜索JavaScript。 - Ibu
4个回答

29

这是一个按位非

我看到最常见的用法是双重按位非,用于去除数字的小数部分,例如:

var a = 1.2;
~~a; // 1

为什么不使用Math.floor呢?一个微不足道的原因是它更快且使用的字节数更少。更重要的原因取决于您如何处理负数。考虑以下情况:

var a = -1.2;
Math.floor(a); // -2
~~a; // -1

因此,在需要向下取整时,请使用Math.floor,在需要截断小数部分(非技术术语)时,请使用~~


7
非常明显,但如果有人感兴趣,(我认为)“chopping off”的技术术语应该是“truncating”。双位非运算符用于此目的可能比使用Math.floor更快且使用的内存更少,但由此得出的数字仍将使用相同数量的内存,因为JavaScript对于数值类型(整数、浮点数等)并没有区分。 - Cristian Sanchez

5

我看到过 ~(波浪号)的一种用法是获取.indexOf()的布尔值。

您可以使用:if(~myArray.indexOf('abc')){ };

而不是:if(myArray.indexOf('abc') > -1){ };

JSFiddle示例


附加信息:波浪线(~)的伟大之谜

允许特殊字符的搜索引擎:Symbol Hound


1

这是一个波浪线,它是按位取反运算符。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接