Einleitung: Warum ist "true" nicht gleich true?
\n\nStellen Sie sich folgende Situation vor: Sie entwickeln ein Frontend für einen Online-Shop. Ein Benutzer wählt die Option «E-Mail-Benachrichtigungen erhalten» aus, und Ihr Code speichert diese als String "true" im localStorage. Beim nächsten Besuch lesen Sie diesen String aus und versuchen, eine Bedingung zu prüfen:
let userPref = localStorage.getItem('notifications');\nif (userPref) {\n // Benachrichtigungen aktivieren\n}\n\n\nUnd dann die Überraschung – die Bedingung wird immer wahr! Selbst wenn im localStorage der String "false" liegt, betrachtet JavaScript ihn als truthy (wahr) Wert. Nicht, weil Sie etwas falsch gemacht haben, sondern weil jeder nicht-leere String in JS true ist.
Dieses Problem ist so bekannt, dass die Frage auf Stack Overflow tausende Aufrufe und dutzende Lösungsvorschläge gesammelt hat. Heute klären wir ein für alle Mal, wie man einen String korrekt in einen Boolean in JavaScript konvertiert, betrachten 5 funktionierende Methoden und ermitteln die beste davon.
\n\nWarum kann man nicht einfach if() verwenden?
\n\nLassen Sie uns diese Frage gleich klären. Viele Anfänger denken: «Wenn ich if(str) schreibe, wird der String "false" zu false». Das ist ein gefährlicher Irrglaube.
In JavaScript gibt es das Konzept der falsy (falschen) Werte. Es gibt genau 6 davon:
\n- \n
false\n 0(Null) \n ""(leerer String) \n null\n undefined\n NaN\n
Alles andere ist truthy. Der String "false" ist nicht leer, er enthält 5 Zeichen. Daher ist er truthy. Gleiches gilt für "0", "null" und sogar "undefined". Eine einfache Typumwandlung über if() oder Boolean() funktioniert bei Strings nicht.
Top-5 Methoden zur Umwandlung eines Strings in einen Boolean
\n\nWir haben alle gängigen Methoden aus Diskussionen auf Stack Overflow und echten Projekten getestet. Hier sind sie, von der schlechtesten zur besten.
\n\nMethode 1: Ternärer Operator (am offensichtlichsten, aber umständlich)
\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\nVorteil: Für Anfänger verständlich.
\nNachteil: Der Code wird umfangreich, wenn man "yes", "1", "on" verarbeiten muss. Man müsste eine Bedingungskette schreiben.
Methode 2: JSON.parse() (elegant, aber streng)
\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')); // Fehler! Gibt null zurück\n\n\nDie Methode JSON.parse() kann die Strings "true" und "false" in Boolean-Werte parsen. Es gibt jedoch eine Einschränkung: Sie ist groß-/kleinschreibungsabhängig. "True" oder "TRUE" verursachen einen Fehler. Dafür gibt JSON.parse("null") null zurück, nicht false – das kann nützlich sein.
Methode 3: Regulärer Ausdruck (flexibel, aber langsam)
\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\nHier verwenden wir das Flag i (Groß-/Kleinschreibung ignorieren) und verarbeiten mehrere Varianten von «Wahrheit»: true, yes, 1,