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.
Excellent exemple de comment ne pas écrire de code! Déjà! –
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