Convertir une chaîne en valeur booléenne en JavaScript : guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : Pourquoi "true" n'est pas égal à true ?

\n\n

Imaginez la situation : vous développez le frontend d'une boutique en ligne. L'utilisateur choisit l'option « Recevoir les notifications par email », et votre code l'enregistre dans localStorage sous forme de chaîne "true". Lors de la prochaine visite, vous lisez cette chaîne et essayez de vérifier la condition :

\n\n
let userPref = localStorage.getItem('notifications');\nif (userPref) {\n    // Activer les notifications\n}\n
\n\n

Et là, surprise — la condition est toujours vraie ! Même si localStorage contient la chaîne "false", JavaScript la considère comme une valeur truthy. Non pas parce que vous avez fait une erreur, mais parce que toute chaîne non vide en JS est true.

\n\n

Ce problème est si populaire que la question sur Stack Overflow a recueilli des milliers de vues et des dizaines de solutions. Aujourd'hui, nous allons une fois pour toutes comprendre comment convertir correctement une chaîne en booléen en JavaScript, examiner 5 méthodes fonctionnelles et identifier la meilleure.

\n\n

Pourquoi ne peut-on pas simplement utiliser if() ?

\n\n

Réglons cela tout de suite. Beaucoup de débutants pensent : « Si j'écris if(str), la chaîne "false" se transformera en false ». C'est une idée reçue dangereuse.

\n\n

En JavaScript, il existe la notion de valeurs falsy. Il y en a exactement 6 :

\n
    \n
  • false
  • \n
  • 0 (zéro)
  • \n
  • "" (chaîne vide)
  • \n
  • null
  • \n
  • undefined
  • \n
  • NaN
  • \n
\n\n

Tout le reste est truthy. La chaîne "false" n'est pas vide, elle contient 5 caractères. Elle est donc truthy. Il en va de même pour "0", "null" et même "undefined". Une simple conversion via if() ou Boolean() ne fonctionnera pas pour les chaînes.

\n\n

Top 5 des méthodes pour convertir une chaîne en booléen

\n\n

Nous avons testé toutes les méthodes populaires issues des discussions sur Stack Overflow et des projets réels. Les voici, de la moins bonne à la meilleure.

\n\n

Méthode 1 : L'opérateur ternaire (la plus évidente, mais lourde)

\n\n
function stringToBoolean(str) {\n    return str === 'true' ? true : str === 'false' ? false : null;\n}\n\nconsole.log(stringToBoolean('true'));  // true\nconsole.log(stringToBoolean('false')); // false\nconsole.log(stringToBoolean('yes'));   // null\n
\n\n

Avantage : Compréhensible pour les débutants.
\nInconvénient : Le code s'allonge si vous devez gérer "yes", "1", "on". Vous devrez écrire une chaîne de conditions.

\n\n

Méthode 2 : JSON.parse() (élégante, mais stricte)

\n\n
function stringToBoolean(str) {\n    try {\n        return JSON.parse(str);\n    } catch (e) {\n        return null;\n    }\n}\n\nconsole.log(stringToBoolean('true'));  // true\nconsole.log(stringToBoolean('false')); // false\nconsole.log(stringToBoolean('TRUE'));  // Erreur ! Retourne null\n
\n\n

La méthode JSON.parse() sait analyser les chaînes "true" et "false" en valeurs booléennes. Mais il y a un détail : elle est sensible à la casse. "True" ou "TRUE" généreront une erreur. En revanche, JSON.parse("null") retournera null, et non false — cela peut être utile.

\n\n

Méthode 3 : Expression régulière (flexible, mais lente)

\n\n
function stringToBoolean(str) {\n    if (typeof str !== 'string') return null;\n    return /^(true|yes|1|on)$/i.test(str.trim());\n}\n\nconsole.log(stringToBoolean('true'));  // true\nconsole.log(stringToBoolean('YES'));   // true\nconsole.log(stringToBoolean('off'));   // false\nconsole.log(stringToBoolean('0'));     // false\n
\n\n

Ici, nous utilisons le drapeau i (insensible à la casse) et traitons plusieurs variantes de « vérité » : true, yes, 1,

Blogs

Book Recommendations