2017-09-28 78 views
-2

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

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

我明白y=a[i]一部分,但到底是什么+-~j办?

+0

如何不写代码很好的例子!永远! –

+3

的可能的复制[是什么时,它先于表达一个波浪线吗?(https://stackoverflow.com/questions/12299665/what-does-a-tilde-do-when-it-precedes-an-expression) – user3351605

回答

2

这(样的?)巧妙地利用波浪(~)运算符,但它只是导致混乱。 ~(有效)将数字加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),强制为真。