4.13 Exercice: Compter la valeur Truthy
L'exercice : écrivez une fonction countTruthy(array) qui reçoit un tableau et renvoie le nombre de valeurs truthy qu'il contient. Avant de coder, petit rappel : en JavaScript, une condition if ne reçoit pas forcément un vrai booléen. Si vous passez une chaîne comme 'Toto', une chaîne vide, un nombre ou null, le moteur va interpréter ces valeurs comme truthy ou falsy.
Les valeurs falsy en JavaScript sont : false, 0, '', null, undefined et NaN. Tout le reste — chaînes non vides, nombres non nuls, objets, tableaux — est truthy. Par exemple, countTruthy([1, 2, 3]) retourne 3, mais countTruthy([1, 2, 3, 0, null, undefined, '']) retourne aussi 3 car les quatre dernières valeurs sont falsy.
Correction avec coercition implicite
On déclare un compteur initialisé à 0, on parcourt le tableau avec une boucle for...of, et on incrémente count uniquement quand la valeur est truthy. Voici l'astuce : il suffit de passer la valeur directement à if, JavaScript se charge de la coercition.
function countTruthy(array) {
let count = 0;
for (let value of array) {
if (value)
count++;
}
return count;
}
console.log(countTruthy([1, 2, 3, 0, null, undefined, ''])); // 3
L'erreur classique serait d'écrire if (value !== false && value !== 0 && value !== '' && value !== null ...) en énumérant les cinq valeurs falsy. C'est inefficace, illisible et impossible à maintenir. Faire confiance à la coercition implicite est la bonne pratique. On se retrouve dans la prochaine vidéo.
En résumé
Cet exercice enseigne le comptage des valeurs truthy en JavaScript, une notion fondamentale pour manipuler les tableaux. Le concept repose sur la coercition de type : JavaScript convertit automatiquement les valeurs en booléens. Les valeurs falsy (false, 0, null, undefined, chaîne vide) doivent être filtrées pour compter uniquement les éléments vrais du tableau. La solution utilise une boucle for...of avec une simple vérification de condition.
Points clés
- Les valeurs truthy : tous les types de données sauf false, 0, null, undefined et chaîne vide
- La coercition de type : JavaScript convertit automatiquement les valeurs non-booléennes en vrai/faux dans les conditions
- L'implémentation : une boucle for...of, un compteur, et une vérification directe sans comparaisons explicites
- Les pièges à éviter : ne pas comparer avec false/undefined/null, mais laisser JavaScript gérer la coercition
- Application pratique : valider les éléments d'un tableau, filtrer les données, compter les entrées utilisateur valides
Questions fréquentes
Pourquoi une chaîne non vide est-elle truthy alors que 0 est falsy ?
JavaScript classe les valeurs par type : une chaîne avec du contenu est considérée comme truthy (une donnée existe), tandis que 0 représente une absence numérique donc falsy. C'est une convention : tout ce qui existe est vrai, tout ce qui est vide ou néant est faux.
Peut-on compter les valeurs falsy plutôt que truthy ?
Oui, il suffit d'inverser la condition : au lieu de vérifier if (value), utiliser if (!value). Le principe reste identique, seule la logique change.
Pourquoi ne pas écrire if (value !== false && value !== null) ?
Parce que c'est inefficace et sujet aux erreurs. JavaScript gère la coercition automatiquement : passer la valeur directement à la condition laisse le moteur décider, ce qui fonctionne pour tous les types de données sans énumérer les cas falsy.