我正在查看其他人的代码,并试图弄清楚他们在做什么。有问题的片段如下所示:
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()
函数中。如果你想检查是否在数组/字符串中找到了某些东西,而不是说:
if (arr.indexOf("foo") > -1) {...}
,你可以说
if (~arr.indexOf("foo")){...}
。这是因为如果未找到该值,indexOf()
将返回 -1,当通过波浪号运算符传递时,将返回 0,这将强制为 false。所有其他值返回 0 到 n,当通过代字号运算符传递时返回 -(1 到 n+1),强制为 true。
关于javascript - -~ 在 JavaScript 中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46477244/