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 réponses
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".
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
C'est une façon très intelligente de lancer un bool.
Questions connexes
Questions liées
De nouvelles questions
javascript
Pour des questions concernant la programmation dans ECMAScript (JavaScript / JS) et ses divers dialectes / implémentations (hors ActionScript). Veuillez inclure toutes les balises pertinentes dans votre question; par exemple, [node.js], [jquery], [json], etc.