Introduction : Pourquoi "true" n'est pas égal à true ?
\n\nImaginez 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 :
let userPref = localStorage.getItem('notifications');\nif (userPref) {\n // Activer les notifications\n}\n\n\nEt 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.
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\nPourquoi ne peut-on pas simplement utiliser if() ?
\n\nRé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.
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
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.
Top 5 des méthodes pour convertir une chaîne en booléen
\n\nNous 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\nMéthode 1 : L'opérateur ternaire (la plus évidente, mais lourde)
\n\nfunction 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\nAvantage : 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.
Méthode 2 : JSON.parse() (élégante, mais stricte)
\n\nfunction 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\nLa 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.
Méthode 3 : Expression régulière (flexible, mais lente)
\n\nfunction 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\nIci, nous utilisons le drapeau i (insensible à la casse) et traitons plusieurs variantes de « vérité » : true, yes, 1,