2017-09-28 12 views
-2

Je regarde le code de quelqu'un d'autre et j'essaie de comprendre ce qu'ils font. L'extrait en question ressemble à ce qui suit:Que fait - ~ en JavaScript?

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

Je comprends la partie y=a[i], mais qu'est-ce que +-~j faire?

+0

Excellent exemple de comment ne pas écrire de code! Déjà! –

+3

Reproduction possible de [Que fait un tilde lorsqu'il précède une expression?] (Https://stackoverflow.com/questions/12299665/what-does-a-tilde-do-when-it-precedes-an-expression) – user3351605

Répondre

2

Ceci est (en quelque sorte?) Une utilisation intelligente de l'opérateur tilde (~), mais cela mène à la confusion. Le ~ (effectivement) ajoute un au nombre et retourne le signe.

~0 === -1

~1 === -2

~-1 === 0

etc.

Le - retourne le signe à ce qu'elle était à l'origine.

Ainsi, le résultat final de -~j est j + 1

Cela devient ensuite ajouté à a[i] et affecté à y

Morale de l'histoire: ne pas écrire du code comme jamais cela.

Note: Il y a légitimes cas d'utilisation pour l'opérateur ~, notamment dans la fonction .indexOf(). Si vous voulez vérifier si quelque chose a été trouvé dans un tableau/string, plutôt que de dire:

if (arr.indexOf("foo") > -1) {...}, vous pouvez dire

if (~arr.indexOf("foo")){...}. En effet, si la valeur n'est pas trouvée, indexOf() renverra -1, ce qui, lorsqu'il passera par l'opérateur tilde, retournera 0, ce qui se traduit par false. Toutes les autres valeurs renvoient 0 à n, ce qui renvoie - (1 à n + 1) lorsqu'il est passé par l'opérateur tilde, qui contraint à vrai.