-2
我正在看别人的代码,我正试图弄清楚他们在做什么。有问题的代码片段如下所示:- JavaScript在做什么?
for(j in a)
for(i in a)
y=a[i]+-~j,b=a[j]
我明白y=a[i]
一部分,但到底是什么+-~j
办?
我正在看别人的代码,我正试图弄清楚他们在做什么。有问题的代码片段如下所示:- JavaScript在做什么?
for(j in a)
for(i in a)
y=a[i]+-~j,b=a[j]
我明白y=a[i]
一部分,但到底是什么+-~j
办?
这(样的?)巧妙地利用波浪(~
)运算符,但它只是导致混乱。 ~
(有效)将数字加1并翻转符号。
~0 === -1
~1 === -2
~-1 === 0
等
的-
翻转迹象回到它原来是。
所以-~j
最终的结果是j + 1
这就被添加到a[i]
并分配到y
这个故事告诉我们:永远不要这样写代码。
注:有合法的使用案例为~
运营商,最明显的是.indexOf()
功能。如果要检查是否有什么东西在一个数组/字符串中发现,而不是说:
if (arr.indexOf("foo") > -1) {...}
,你可以说
if (~arr.indexOf("foo")){...}
。这是因为如果未找到该值,indexOf()
将返回-1,该值在通过代字符运算符时将返回0,强制为false。所有其他值都会返回0到n,当通过代字符运算符时返回 - (1到n + 1),强制为真。
如何不写代码很好的例子!永远! –
的可能的复制[是什么时,它先于表达一个波浪线吗?(https://stackoverflow.com/questions/12299665/what-does-a-tilde-do-when-it-precedes-an-expression) – user3351605