Beaucoup de bugs tiennent à une confusion simple : croire que ce qui échoue à un test vaut false. Sept autres valeurs échouent sans être ce booléen, et deux d'entre elles, le zéro et la chaîne vide, sont des données valides qu'on efface par accident.
Définition
false est un littéral du langage, la valeur négative du type booléen, l'autre étant true. C'est un mot réservé, en minuscules et sans guillemets. On l'obtient en l'écrivant, ou bien plus souvent comme résultat d'une comparaison qui ne se vérifie pas.
const estPaye = false;
console.log(3 > 10); // false
console.log("a" === "b"); // false
console.log([1, 2].includes(9)); // false
console.log(typeof false); // "boolean"Un point à noter au passage : sur un tableau vide, [].some(...) renvoie toujours false et [].every(...) toujours true, quelle que soit la fonction fournie.
Les huit valeurs traitées comme fausses
Un test n'exige pas un booléen : il convertit ce qu'on lui donne. Les valeurs qui deviennent fausses lors de cette conversion sont dites falsy, et elles sont assez peu nombreuses pour être apprises par cœur.
| Valeur | Ce qu'elle représente |
|---|---|
false | Le booléen lui-même |
0 et -0 | Les zéros numériques |
0n | Le zéro en grands entiers |
"" | La chaîne vide |
null | Le vide décidé |
undefined | Le vide subi |
NaN | Un calcul numérique qui a échoué |
Tout le reste est vrai, sans exception. Un tableau vide, un objet vide, la chaîne "0" et la chaîne "false" passent tous les tests. Le sujet complet est traité dans Truthy et falsy.
Le piège du zéro et de la chaîne vide
C'est le défaut le plus coûteux de la liste, parce qu'il ne casse rien tant que les valeurs restent grandes.
function afficherStock(quantite) {
// Piège : 0 est une quantité valide, mais falsy
return quantite || "non renseigné";
}
console.log(afficherStock(12)); // 12
console.log(afficherStock(0)); // "non renseigné", alors que le stock vaut 0 !
// Correction : ne remplacer que null et undefined
function corrige(quantite) {
return quantite ?? "non renseigné";
}
console.log(corrige(0)); // 0Le même problème frappe une remise de zéro pour cent ou une note de zéro. La règle pratique : dès qu'une valeur de repli concerne une donnée numérique ou textuelle, préférez la Coalescence des nuls (??) au ||.
Une valeur falsy n'est pas égale à false. Toutes échouent aux tests, mais 0 === false vaut false, et "" === false aussi. Elles se comportent pareil, elles ne sont pas identiques.
Questions fréquentes
Pourquoi un tableau vide n'est-il pas falsy ?
Parce qu'un tableau est un objet, et qu'aucun objet n'est falsy en JavaScript : la liste des huit valeurs fausses ne contient que des primitives. Pour tester un tableau, passez par sa taille avec Array (tableau).isArray(t) && t.length > 0.
Quelle différence entre false et null dans une réponse d'API ?
Une différence de sens considérable. false affirme une réponse négative : la commande n'est pas payée. null affirme qu'il n'y a pas d'information : on ignore si elle est payée. Confondre les deux transforme une inconnue en un non, ce qui fausse les décisions prises ensuite.
Comment obtenir false à partir d'une autre valeur ?
En appelant Boolean (booléen)(valeur), qui applique les règles du tableau ci-dessus, ou en écrivant !!valeur, qui produit le même résultat en deux caractères. C'est utile avant d'enregistrer une réponse en base, où l'on veut un vrai booléen et non une chaîne vide.