3514 Stimmen

Wie kann ich in JavaScript eine Zeichenkette in einen Booleschen Wert umwandeln?

Kann ich eine Zeichenkette, die einen booleschen Wert repräsentiert (z. B. 'true', 'false'), in einen intrinsischen Typ in JavaScript umwandeln?

Ich habe ein verstecktes Formular in HTML, das auf der Grundlage der Auswahl eines Benutzers in einer Liste aktualisiert wird. Dieses Formular enthält einige Felder, die boolesche Werte darstellen und dynamisch mit einem eigenen booleschen Wert befüllt werden. Sobald dieser Wert jedoch in das verborgene Eingabefeld eingegeben wird, wird er zu einem String.

Die einzige Möglichkeit, den booleschen Wert des Feldes nach der Konvertierung in eine Zeichenkette zu bestimmen, bestand darin, sich auf den literalen Wert der Zeichenkettendarstellung zu verlassen.

var myValue = document.myForm.IS_TRUE.value;
var isTrueSet = myValue == 'true';

Gibt es eine bessere Möglichkeit, dies zu erreichen?

0 Stimmen

Nur um ein seltsames Beispiel für die Vermeidung eines Dreifach-Gleichheits-Vergleichs hervorzuheben: Ich habe eine Funktion currentSortDirection() die zurückgibt 1 für eine aufsteigende Sortierung, 0 für eine absteigende Sortierung, und -1 für nicht gesetzt. Verwendung von while (currentSortDirection() != desiredSortDirection) { sortColumn() } funktioniert hervorragend, da -1 != true y -1 != false ...aber dies zu ändern in while (Boolean(currentSortDirection) !== ...) {...} Kräfte -1 in eine true was ein paar zusätzliche Zeilen an Vorbereitung erfordert, nur um jshint glücklich zu machen.

0 Stimmen

Mögliches Duplikat von stackoverflow.com/questions/263965

0 Stimmen

@Droogans: Was passiert, wenn desiredSortDirection wird eingestellt auf asc ? Ich weiß, dass Sie in einer kontrollierten Umgebung wahrscheinlich die Kontrolle über den Wert haben. desiredSortDirection auf aber in einer gemeinsamen Umgebung gesetzt wird, wenn die Eingabe von desiredSortDirection kann von überall und in jeder Form kommen, Typüberprüfung gegen benutzerdefinierte Objekte und defensive Programmierung kann viele Stunden der Fehlersuche sparen. Ihr Code ist absolut in Ordnung und es ist nichts daran auszusetzen. Ich weise lediglich darauf hin, dass es keine allgemeingültige Antwort/Lösung gibt und es immer vom Szenario abhängt.

4961voto

guinaps Punkte 4051

Machen:

var isTrueSet = (myValue === 'true');

unter Verwendung des Identitätsoperators ( === ), die keine impliziten Typumwandlungen vornimmt, wenn die verglichenen Variablen unterschiedliche Typen haben.


Tun Sie es nicht:

Sie sollten wahrscheinlich Seien Sie vorsichtig bei der Verwendung dieser beiden Methoden für Ihre spezifischen Bedürfnisse:

var myBool = Boolean("false");  // == true

var myBool = !!"false";  // == true

Jede Zeichenkette, die nicht die leere Zeichenkette ist, ergibt den Wert true indem man sie benutzt. Obwohl sie die saubersten Methoden sind, die mir in Bezug auf die boolesche Konvertierung einfallen, denke ich, dass sie nicht das sind, wonach Sie suchen.

249 Stimmen

myValue === 'true'; ist genau gleichbedeutend mit myValue == 'true'; . Es gibt keinen Vorteil bei der Verwendung von === über == hier.

748 Stimmen

Ich folge Crockfords Rat und verwenden === y !== wenn es sinnvoll ist, was fast immer der Fall ist.

0 Stimmen

@guinaps die meisten der strengen Javascript Konventionen zu pauschal gelten für alle Javascript Nutzung nur dazu führen, dass verworrene Code und ein Mangel an Verständnis für die Grundsätze, Theorie oder Nutzung von Javascript.

860voto

Luke Punkte 1411

Warnung

Diese hoch gevotete Legacy-Antwort ist technisch korrekt, deckt aber nur ein sehr spezielles Szenario ab, wenn Ihr String-Wert EXAKT ist "true" ou "false" .

Eine ungültige json-Zeichenkette, die an diese Funktionen weitergegeben wird WILL eine Ausnahme auslösen .


Ursprüngliche Antwort:

Wie wäre es damit?

JSON.parse("True".toLowerCase());

oder mit jQuery

$.parseJSON("TRUE".toLowerCase());

81 Stimmen

Das Problem dabei ist, dass viele potenzielle Werte einen Parse-Fehler erzeugen, der die Ausführung von JS stoppt. Wenn Sie also JSON.parse("FALSE") ausführen, wird Javascript abgebrochen. Der Punkt der Frage ist, denke ich, nicht nur diese genauen Fälle zu lösen, sondern auch auf andere Fälle widerstandsfähig zu sein.

55 Stimmen

Es ist ziemlich einfach, einfach zu sagen JSON.parse("TRUE".toLowerCase()) damit sie korrekt geparst werden kann.

4 Stimmen

@BishopZ : Das Anhalten der JS-Ausführung ist wahrscheinlich eine wünschenswerte Funktion, die dem Best-Pattern-Codierungsstil folgt: de.wikipedia.org/wiki/Fail-fast

298voto

stringToBoolean: function(string){
    switch(string.toLowerCase().trim()){
        case "true": 
        case "yes": 
        case "1": 
          return true;

        case "false": 
        case "no": 
        case "0": 
        case null: 
          return false;

        default: 
          return Boolean(string);
    }
}

56 Stimmen

Eigentlich kann es vereinfacht werden. 1) Es ist nicht nötig, zu prüfen, ob "true" , "yes" y "1" . 2) toLowerCase kehrt nicht zurück null . 3) Boolean(string) ist dasselbe wie string!=="" hier. => switch(string.toLowerCase()) {case "false": case "no": case "0": case "": return false; default: return true;}

7 Stimmen

Beachten Sie, dass dies standardmäßig auf true - zum Beispiel: stringToBoolean('banana') // true

270voto

Ich denke, das ist sehr universell:

if (String(a).toLowerCase() == "true") ...

Es geht:

String(true) == "true"     //returns true
String(false) == "true"    //returns false
String("true") == "true"   //returns true
String("false") == "true"  //returns false

26 Stimmen

Wenn Sie eine Zeichenkette in Großbuchstaben oder einen Booleschen Wert empfangen können, dann String(a).toLowerCase() === 'true'

171voto

Jared Farrish Punkte 47037

Achten Sie auf die Groß- und Kleinschreibung:

var isTrueSet = (myValue.toLowerCase() === 'true');

Wenn es sich um ein Kästchen eines Formularelements handelt, können Sie auch erkennen, ob das Kästchen markiert ist:

var isTrueSet = document.myForm.IS_TRUE.checked;

In der Annahme, dass es, wenn es geprüft wird, gleich "wahr" gesetzt wird. Dies wird als wahr/falsch ausgewertet.

0 Stimmen

Dies schlägt fehl, wenn myValue null oder undefiniert ist oder einen anderen Typ als String hat.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X