Ma préférée est d’utiliser !!
. C’est aussi la méthode recommandée par le guide de style JavaScript d’Airbnb 👍
Boolean(value);!!value;
# Convertir des valeurs en booléen
.
# String
const string = 'string';!!string; // trueBoolean(string); // true
# Number
const number = 100;!!number; // trueBoolean(number); // true
# Falsy Values
En JavaScript, il y a 6 valeurs fausses. Si vous convertissez l’une d’entre elles en une boolean
, elle renverra false
.
falseundefinednullNaN0"" (empty string)
Tout ce qui n’est pas sur la liste falsy, retournera true
👍
Plus d’informations à ce sujet, vous pouvez lire mes notes de code sur les valeurs falsy
# Exemples
Application de !!
sur les valeurs falsy
!!false; // false!!undefined; // false!!null; // false!!NaN; // false!!0; // false!!''; // false
Application de Boolean
sur des valeurs fausses
Boolean(false); // falseBoolean(undefined); // falseBoolean(null); // falseBoolean(NaN); // falseBoolean(0); // falseBoolean(''); // false
# How the !! fonctionne
La première !
coerce la valeur en un booléen et l’inverse. Dans ce cas, !value
retournera false
. Donc pour l’inverser en true
, nous mettons une autre !
dessus. D’où la double utilisation !!
.
const value = 'string';!value; // false!!value; // true
# Attention au ‘false’
const value = 'false';!!value; // trueBoolean(value); // true
Notez que la "false"
est entre guillemets '
. Bien qu’il soit écrit false
, il s’agit en fait d’une chaîne de caractères. Je sais que la plupart d’entre vous ne tomberont pas dans le panneau, mais si vous êtes comme moi, vous pourriez juste vouloir être attentif à ces drôles de tours d’esprit que les gens pourraient vous jouer 😂
# Community Input
@tassoevan : J’aime filtrer les valeurs fausses des tableaux comme celui-ci : myArray.filter(Boolean)
@fleonus : J’aime bien !+!
juste pour être cool et déstabiliser les gens 😛
# Test de vitesse
Voici un test que j’ai trouvé :
booléen vs ! !!
Il semble que la !!
soit un peu plus rapide que la Boolean
# Laquelle utiliser ?
J’ai reçu beaucoup de commentaires sur ce billet. Certaines personnes préfèrent le Boolean
parce qu’il est plus explicite.
Mais, Kyle Simpson de You Don’t Know JS, a mentionné que les deux sont explicites.
// better (works explicitly):if (!!a) {}// also great (works explicitly):if (Boolean(a)) {}
Kyle Simpson : YDKJS – Coercition
Je ne pense pas avoir une grande réponse pour vous. Vous connaîtrez votre équipe bien mieux que moi. Je continuerai à utiliser !!
dans mes projets personnels, car c’est moins de frappe et je comprends cette syntaxe. Mais si j’étais dans une équipe, je choisirais peut-être Boolean
parce que je pense que la plupart des développeurs comprendraient mieux cela. Peu importe celle que vous choisissez, le plus important est d’être cohérent. Ne faites pas volte-face entre les deux dans votre base de code. Choisissez-en une et tenez-vous en à elle 💪
En réponse à un commentaire génial que j’ai reçu :
@patrick_developer : Je dis qu’il faut comprendre les deux juste au cas où l’on se présente avec différentes bases de code qui utilisent chacune d’elles. La connaissance est le pouvoir.
En d’autres termes, l’un n’est pas meilleur que l’autre. Celui-ci, je dirais, est plus une préférence. Vous ne pouvez donc pas vous tromper. Mais ne vous privez pas de comprendre les deux. Comme l’a dit Patrick, » Knowledge is power » 💪
# Avoid new Boolean
Utiliser des primitives plutôt que des types d’objets
var str = 'str';// Avoidtypeof new Boolean(str); // object// Preferredtypeof Boolean(str); // booleantypeof !!str; // boolean
CJ J. : Il est intéressant de noter que new Boolean
n’est pas un booléen mais plutôt une instance de Boolean. Les primitives sont moins chères et doivent être préférées au type d’objet.
CJ J. : new Boolean(str)
renvoie un type d’objet. Boolean(str)
renvoie juste un booléen primitif. Je soupçonnerais Boolean(str)
d’être plus rapide que !!str
car il n’y a qu’une seule opération, mais il est aussi tout à fait possible que les navigateurs mettent en œuvre une optimisation telle que lorsqu’ils voient !!
, ils savent qu’il faut directement couler l’argument vers une primitive booléenne (au lieu de faire effectivement NOT()
deux fois de suite).
CJ J. : Les primitives sont bon marché parce qu’elles sont immuables, donc vous pouvez partager des références et ne pas avoir à maintenir un état sur l’instance. C’est juste true
ou false
. Mais new Boolean(str)
est un objet. Il a sa propre adresse mémoire unique et il peut contenir un état interne qui lui est propre. Cela signifie qu’il ne peut pas simplement contenir une référence à une instance singleton immuable. Chaque appel à new Boolean(str)
instancie un tout nouvel Boolean()
objet.
Merci : CJ J .
# Supprimer les chaînes vides avec le constructeur booléen
CJ J. : C’est l’exemple classique. Si vous obtenez une liste de valeurs de chaînes séparées par des virgules et que vous voulez filtrer les chaînes vides, vous pouvez passer la fonction du constructeur booléen dans Array.prototype.filter et il enlèvera automatiquement les chaînes de longueur nulle en laissant un tableau composé uniquement de chaînes valides.
var str = 'some,list,,of,values';var arr = str.split(',');arr; // arr.filter(Boolean); //
Merci : CJ J .