L'opérateur Bitwise (Tilde ~) en javascript

L'opérateur Bitwise est un opérateur particulier que l'ont rencontre peu souvent vu sa complexité d'analyse. Mais il s'avère très utile pour garder un code assez léger.
Mais c'est quoi ce truc?

Admettons que vous souhaitiez connaitre si dans une variable ( un chaine de caractère par exemple) un élément est présent :

// indexOf renvoi : 1
if( "machin".indexOf("a") ){  
    console.log('OKeY'); // Passed!
}
Comme le montre ce code la variable testé renverra "1" l'index de la première occurrence trouvé. Cool! mais...attendez...
// indexOf renvoi : 0;
if( "machin".indexOf("m") ){  
    console.log('OKeY');
}

Dans ce cas si l'index est de 0 donc FALSE, donc nous ne rentrerons pas dans le IF! Alors que la valeur de test est bien dans notre variable! WTF! Pour ceux qui ne le savent pas, indexOf renvoi -1 lorsqu'il ne trouve aucune occurrence.

// indexOf renvoi : -1;
if( "machin".indexOf("z") ){  
    console.log('OKeY'); // Passed!
}

Dans ce cas si l'index est de -1, le IF l'interprétera donc comme une valeur TRUE. Nous passerons donc le test sans problème alors que la variable ne contient pas la valeur de test! Et vous allez me dire qu'il suffit de tester la valeur comme ceci :

// indexOf renvoi : -1;
if( "machin".indexOf("z") > -1 ){  
    console.log('OKeY');
}

Avouez que c'est quand même bien dégueu comme vérification..mais ça fonctionne... C'est surtout là que rentre en scène le Bitwise! Le Bitwise a une action particulière sur les entiers Il transforme par exemple :

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

Vous l'aurez compris son utilité !

// indexOf renvoi : -1 qui sera tranformé en 0 par le bitwise!;
if( ~"machin".indexOf("z") ){  
    console.log('OKeY');
}

// indexOf renvoi : 0 qui sera tranformé en -1 par le bitwise!;
if( ~"machin".indexOf("m") ){  
    console.log('OKeY');
}
comments powered by Disqus