689 votes

Qu'est-ce que l'opérateur "double tilde" (~~) en JavaScript?

Je vois cela dans du code, et je n'ai aucune idée de ce qu'il fait:

 var jdn = function(y, m, d) {
  var tmp = (m <= 2 ? -1 : 0);
  return ~~((1461 * (y + 4800 + tmp)) / 4) + 
         ~~((367 * (m - 2 - 12 * tmp)) / 12) - 
         ~~((3 * ((y + 4900 + tmp) / 100)) / 4) + 
         d - 2483620;
};
 

Qu'est-ce que l'opérateur ~~ fait?

907voto

ghoppe Points 10004

Que `` n’est pas un double opérateur.

Il est utilisé comme un plus rapide produit de remplacement pour `` .

222voto

Guffa Points 308133

Il cache l'intention de ce code.

C'est deux tilde unique opérateurs, de sorte qu'il n'est un complément bit à bit (not au niveau du bit) deux fois. Les opérations prennent les uns des autres, de sorte que le seul effet est la conversion qui est fait avant le premier opérateur est appliqué, c'est à dire la conversion de la valeur d'un nombre entier.

Certains l'utilisent comme une alternative plus rapide à l' Math.floor, mais la différence de vitesse n'est pas si dramatique, et dans la plupart des cas, c'est juste le micro d'optimisation. Sauf si vous avez un morceau de code qui a vraiment besoin d'être optimisé, vous devez utiliser le code qui décrivent ce qu'il fait au lieu de code qui utilise un effet secondaire d'un non-fonctionnement.

Mise à jour 2011-08:

Avec l'optimisation du moteur de JavaScript dans les navigateurs, les performances pour les opérateurs et les fonctions de changement. Avec les navigateurs actuels, à l'aide de ~~ au lieu de Math.floor est un peu plus rapide dans certains navigateurs, et pas plus rapide dans certains navigateurs. Si vous avez vraiment besoin d'un peu plus de performances, vous devez écrire différents optimisé le code pour chaque navigateur.

Voir: tilde vs étage

174voto

bowsersenior Points 7841
<pre><code></code><p>Pour plus d’informations, consultez :</p><ul> <li><a href="http://dreaminginjavascript.wordpress.com/2008/07/04/28/">http://dreaminginjavascript.wordpress.com/2008/07/04/28/</a></li> </ul></pre>

25voto

Jason Stackhouse Points 690

La diffrence est très simple:

Version longue

Si vous voulez avoir une meilleure lisibilité, utilisez Math.floor. Mais si vous voulez réduire, l'utiliser tilde ~~.

Il y a beaucoup de sources sur internet en disant: Math.floor est plus rapide, mais parfois, ~~. Je ne recommande pas que vous pensez à propos de la vitesse, car il ne va pas être remarqué lors de l'exécution du code. Peut-être dans des tests, etc, mais aucun humain ne peut voir une différence ici. Ce serait plus rapide est d'utiliser ~~ plus rapide temps de chargement.

Version courte

~~ est plus courte/prend moins d'espace. Math.floor améliore la lisibilité. Parfois tilde est plus rapide, parfois Math.floor est plus rapide, mais il n'est pas perceptible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X