false en JavaScript : la valeur fausse et les huit valeurs falsy

false est la valeur négative du type booléen en JavaScript. Voici les huit valeurs traitées comme fausses, et les deux qui font le plus de dégâts.
3 min de lecture
Believemy logo

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.

JAVASCRIPT
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.

ValeurCe qu'elle représente
falseLe booléen lui-même
0 et -0Les zéros numériques
0nLe zéro en grands entiers
""La chaîne vide
nullLe vide décidé
undefinedLe vide subi
NaNUn 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.

JAVASCRIPT
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)); // 0

Le 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 ||.

Bon à savoir

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

Question

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.


Question

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.


Question

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.

Termes connexes

Découvrez notre glossaire JavaScript

Tous les mots de JavaScript expliqués simplement : mots-clés, objets natifs, méthodes, erreurs et concepts. Définitions claires et exemples qui tournent, pour apprendre et pour se dépanner.

Partager cet article

Tu veux nous aider ? Fais un lien vers cet article sur tes réseaux ou encore mieux : sur ton site, dans un article ou dans ta newsletter.