Un programme passe son temps à trancher. Ce panier contient-il quelque chose, cet utilisateur a-t-il payé ? Pour répondre, il faut un type de donnée qui ne connaisse que deux réponses : le booléen, dont true est la réponse positive.
Définition
true est un littéral du langage, l'une des deux seules valeurs du type booléen avec false. Il s'écrit en minuscules, sans guillemets, et c'est un mot réservé.
On l'obtient en l'écrivant à la main, ou en laissant une comparaison le produire. La seconde façon est de très loin la plus fréquente.
const estAdmin = true; // écrit à la main
const panier = [1, 2, 3];
console.log(panier.length > 0); // true, produit par la comparaison
console.log(panier.includes(2)); // true, produit par une méthode
console.log(typeof true); // "boolean"Retenez ceci : toute comparaison renvoie un booléen et rien d'autre. Vous n'avez donc jamais à fabriquer true pour écrire une condition.
Le motif if (estActif === true) est redondant. if (estActif) dit la même chose, en plus court, et c'est la convention dans tout le langage.
Vrai, et ce qui passe pour vrai
Un if n'exige pas un vrai booléen. Il accepte n'importe quelle valeur, puis décide lui-même si elle compte comme vraie. Il faut donc séparer true d'un côté, et de l'autre tout ce que le langage traite comme vrai sans en être.
La règle se retient par la négative : Truthy et falsy liste les huit valeurs considérées comme fausses, et tout le reste est vrai. Y compris des valeurs qui surprennent.
| Valeur | Dans un test | Égale à true avec === ? |
|---|---|---|
true | Vraie | Oui |
1 | Vraie | Non |
"0" | Vraie, la chaîne n'est pas vide | Non |
[] | Vraie, un tableau reste un objet | Non |
"false" | Vraie, c'est du texte | Non |
Les trois dernières lignes causent de vrais dégâts. Un tableau vide passe un test alors qu'il ne contient rien, et la chaîne "false" lue depuis une URL est parfaitement vraie.
Convertir en booléen
Pour transformer une valeur quelconque en un vrai booléen, deux écritures équivalentes existent.
console.log(Boolean("0")); // true
console.log(!!"0"); // true, écriture courte
console.log(Boolean("")); // false
console.log(Boolean(0)); // false
// Le piège de la chaîne venue d'ailleurs
const brut = "false";
console.log(Boolean(brut)); // true
console.log(brut === "true"); // false, et c'est le bon testLe double point d'exclamation n'est pas un opérateur : c'est la négation appliquée deux fois, qui ramène la valeur à son booléen équivalent. La conversion explicite par Boolean (booléen) reste plus lisible dans du code partagé.
Questions fréquentes
Pourquoi 2 == true renvoie-t-il false ?
Parce que l'Égalité faible (==) ne compare pas la véracité, elle convertit. true devient le nombre 1, puis 2 est comparé à 1, et le résultat est faux. C'est pour cela que comparer une valeur à true est déconseillé : posez la condition directement, ou utilisez l'Égalité stricte (===).
Comment lire un booléen envoyé par un serveur ?
Si la donnée arrive en JSON, elle est déjà un vrai booléen après analyse. Si elle arrive dans une URL ou un attribut HTML, c'est forcément du texte : comparez explicitement avec valeur === "true", car toute chaîne non vide passerait un test brut.
Faut-il utiliser new Boolean(true) ?
Non, jamais. Cette forme crée un objet enveloppant, et un objet est toujours vrai dans un test, y compris new Boolean(false), soit l'inverse exact du comportement attendu. Utilisez la fonction sans new, qui renvoie bien un booléen primitif.