Voir la source http://webmail.mac.com.

  B.incompatible = !!(B.msie < 7 || B.safari < 500 || B.mozilla < 1.008000999);
  B.unsupported  = !!(B.opera || B.safari < 500) && !B.incompatible;
  B.supported    = !B.incompatible && !B.unsupported;

Pourquoi le double "!" utilisé ici? Y a-t-il un avantage?

3
Cynial 9 nov. 2011 à 14:29

3 réponses

Meilleure réponse

Cela ne sert à rien dans ce cas, puisque les expressions évaluent déjà de toute façon des valeurs booléennes. C'est probablement juste un programmeur "très sûr".

4
Matthew Crumley 9 nov. 2011 à 14:07

L'opérateur logique NOT ("!") Est utilisé pour convertir vrai en faux et vice versa.

! true // expresses false
! false // expresses true

Cependant, il contraint également les valeurs. Les nombres non nuls et les chaînes non vides sont vrais. Ils deviennent donc faux.

! 1.0 // expresses false
! 0.0 // expresses true
! '@' // expresses false
! '' // expresses true

L'utilisation de deux NOTs la reconvertit à la valeur booléenne d'origine.

!! 1.0 // expresses true
!! 0.0 // expresses false
!! '@' // expresses true
!! '' // expresses false

Cela revient à appeler le constructeur booléen. Cependant, il est plus rapide (pas de surcharge d'appel de fonction), plus court et plus lisible.

!! 1.0 === Boolean(1.0) // expresses true
2
Aadit M Shah 9 nov. 2011 à 10:38

C'est une façon très intelligente de lancer un bool.

0
TJHeuvel 9 nov. 2011 à 10:31