-~ 在 JavaScript 中有什么作用?

What does -~ do in JavaScript?

我在看别人的代码,我想弄清楚他们在做什么。有问题的片段如下所示:

for(j in a)     
  for(i in a)
    y=a[i]+-~j,b=a[j]

我理解 y=a[i] 部分,但是 +-~j 是做什么的?

这是(有点?)波浪号 (~) 运算符的巧妙使用,但它只会导致混乱。 ~(有效地)将数字加一并翻转符号。

~0 === -1

~1 === -2

~-1 === 0

等等

- 将标志翻转回原来的样子。

所以-~j的最终结果是j + 1

然后将其添加到 a[i] 并分配给 y

Moral of the story: don't ever write code like this.

注意: ~ 运算符有合法的用例,最值得注意的是 .indexOf() 函数。如果你想检查是否在 array/string 中找到了某些东西,而不是说:

if (arr.indexOf("foo") > -1) {...},你可以说

if (~arr.indexOf("foo")){...}。这是因为如果未找到该值,indexOf() 将 return -1,当通过波浪号运算符传递时,将 return 0,强制为 false。所有其他值 return 0 到 n,其中 return -(1 到 n+1)当通过代字号运算符传递时,强制为 true。