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


Cette question a déjà une réponse ici:

Je vois cela dans un code, et je n'ai aucune idée de ce que cela 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;
};

Quel est le ~~ opérateur faire?


430
2018-05-11 23:18


origine


Réponses:


Cette ~~ est un double opérateur NOT bitwise.

Il est utilisé comme substitut plus rapide pour Math.floor().


553
2018-05-11 23:21



Il cache l'intention du code.

Il s'agit de deux opérateurs tilde simples, ce qui fait que le complément bit à bit (bitwise not) deux fois. Les opérations se séparent les unes des autres, le seul effet restant est la conversion effectuée avant l'application du premier opérateur, c'est-à-dire la conversion de la valeur en nombre entier.

Certains l'utilisent comme une alternative plus rapide à Math.floor, mais la différence de vitesse n'est pas si dramatique, et dans la plupart des cas, c'est juste une micro-optimisation. À moins d'avoir un morceau de code qui a vraiment besoin d'être optimisé, vous devriez utiliser du code qui décrit ce qu'il fait à la place du code qui utilise un effet secondaire d'une non-opération.

Mise à jour 2011-08:

Avec l'optimisation du moteur JavaScript dans les navigateurs, les performances des opérateurs et des fonctions changent. Avec les navigateurs actuels, en utilisant ~~ au lieu de Math.floor est un peu plus rapide dans certains navigateurs, et pas du tout plus rapide dans certains navigateurs. Si vous avez réellement besoin de ces performances supplémentaires, vous devez écrire un code optimisé différent pour chaque navigateur.

Voir: tilde vs étage


138
2018-05-11 23:38



~(5.5)   // => -6
~(-6)    // => 5
~~5.5    // => 5  (same as Math.floor(5.5))
~~(-5.5) // => -5 (NOT the same as Math.floor(-5.5), which would give -6 )

Pour plus d'informations, voir:


107
2018-05-11 23:25



La différence est très simple:

Version longue

Si vous voulez avoir une meilleure lisibilité, utilisez Math.floor. Mais si vous voulez le minimiser, utilisez le tilde ~~.

Il y a beaucoup de sources sur internet qui disent Math.floor est plus rapide, mais parfois ~~. Je ne vous recommande pas de penser à la vitesse car elle ne sera pas remarquée lors de l'exécution du code. Peut-être dans les tests etc, mais aucun humain ne peut voir une différence ici. Ce qui serait le plus rapide serait d'utiliser ~~ pour un temps de chargement plus rapide.

Version courte

~~ est plus court / prend moins de place. Math.floor améliore la lisibilité. Parfois, le tilde est plus rapide, parfois Math.floor est plus rapide, mais ce n'est pas perceptible.


16
2018-06-08 08:16