-~ 在 JavaScript 中做什么?

Bry*_*yro 2 javascript operators code-snippets

我正在查看其他人的代码,并试图弄清楚他们在做什么。有问题的代码段如下所示:

for(j in a)     
  for(i in a)
    y=a[i]+-~j,b=a[j]
Run Code Online (Sandbox Code Playgroud)

我明白这y=a[i]部分,但有什么作用+-~j

mho*_*ges 9

这是(有点?)波浪号 ( ~) 运算符的巧妙使用,但它只会导致混淆。的~(有效),增加了一个数量和翻转迹象。

~0 === -1

~1 === -2

~-1 === 0

等等。

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

所以最终的结果-~jj + 1

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

这个故事的寓意:永远不要写这样的代码。

注意:~操作符有合法的用例,尤其是在.indexOf()函数中。如果您想检查是否在数组/字符串中找到了某些内容,而不是说:

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

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