-~ 在 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。
我在看别人的代码,我想弄清楚他们在做什么。有问题的片段如下所示:
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。