L’opérateur NOT bitwise “~” (ou tilde) en Javascript


L’opérateur NOT bitwise est en général utilisé comme un Math.floor(), en plus rapide. Mais il a une propriété amusante sur les entiers, il les transforme en -(N+1), où N est l’entier en question.

La conséquence ?

~-2 => 1
~-1 => 0
~0 => -1
~1 => -2
~2 => -3

Or, en javascript on a un problème avec le fait que la seule option pour rechercher un élément dans un ensemble soit des fonctions comme indexOf qui retournent l’index de ce qu’elles trouvent ou -1, les chiennes.

Ce qui fait que:

if ("truc".indexOf('t')) {
    console.log('trouvé')
}

Ne va rien afficher, car 't' est à la première place, renvoyant l’index 0, qui est “faux” dans un contexte booléan. Mais :

if ("truc".indexOf('z')) {
    console.log('trouvé')
}

Va afficher “trouvé” car la fonction renvoit -1 quand elle ne trouve rien. C’est nul. On se retrouve donc à faire du :

if ("truc".indexOf('z') > -1) {
    console.log('trouvé')
}

Ce qui est moche comme ça en peut plus. Mais avec l’opérateur bitwise, 0 devient -1 (donc vrai, comme tous les autres chiffres) et -1 devient zéro.

if (~"truc".indexOf('t')) {
    console.log('trouvé')
}

Et là ça va marcher !

Vous venez officiellement de passer 10 minutes sur un article qui va vous faire gagner 1 seconde sur l’ensemble de votre vie. En fait même pas, car pour garder votre code lisible, je vous recommande de ne pas utiliser cette technique.

De rien.

13 thoughts on “L’opérateur NOT bitwise “~” (ou tilde) en Javascript

Comments are closed.

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.