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.

19voto

Felipe Chernicharo Punkte 1812

Einfachste Lösung

mit ES6+

verwenden Sie die logisch NOT zweimal [ !! ] um die Zeichenkette zu konvertieren

Fügen Sie einfach diesen Ausdruck ein...

const stringToBoolean = (string) => string === 'false' ? false : !!string

Und gib deine Schnur an sie weiter!

stringToBoolean('')                 // false
stringToBoolean('false')            // false
stringToBoolean('true')             // true
stringToBoolean('hello my friend!') // true

Bonus!

const betterStringToBoolean = (string) => 
  string === 'false' || string === 'undefined' || string === 'null' || string === '0' ?
  false : !!string

Sie können nach Belieben andere Zeichenfolgen einfügen, um die Verwendung dieses Ausdrucks zu erweitern...:

betterStringToBoolean('undefined')     // false
betterStringToBoolean('null')          // false
betterStringToBoolean('0')             // false
betterStringToBoolean('false')         // false
betterStringToBoolean('')              // false
betterStringToBoolean('true')          // true
betterStringToBoolean('anything else') // true

0 Stimmen

Wie wäre es mit '1' ? Sollte sie umgewandelt werden in true o false ? Ich denke, es sollte sein true nicht? Aber wenn man Ihre Antwort verwendet, wird das Ergebnis false

0 Stimmen

Ich glaube, Sie machen etwas falsch, Bruder... Ich habe gerade den Code getestet und wenn Sie eingeben ' 1 ' die Rückgabe ist immer true . Ich weiß nicht, woher du das hast. false aber ich denke, Sie müssen es irgendwie vermasseln

0 Stimmen

Entschuldigung! Mein Fehler, ich habe stattdessen die erste Funktion getestet. Danke für die Klarstellung.

18voto

AndreasPizsa Punkte 1659

Der Ausdruck, den Sie suchen, lautet einfach

/^true$/i.test(myValue)

wie in

var isTrueSet = /^true$/i.test(myValue);

Diese Tests myValue gegen einen regulären Ausdruck, ohne Berücksichtigung der Groß- und Kleinschreibung, und ändert den Prototyp nicht.

Beispiele:

/^true$/i.test("true"); // true
/^true$/i.test("TRUE"); // true
/^true$/i.test("tRuE"); // true
/^true$/i.test(" tRuE"); // false (notice the space at the beginning)
/^true$/i.test("untrue"); // false (some other solutions here will incorrectly return true
/^true$/i.test("false");// returns false
/^true$/i.test("xyz");  // returns false

17voto

Mohammad Farahani Punkte 513

Können Sie JSON.parse wie folgt:

var trueOrFalse='True';
result =JSON.parse(trueOrFalse.toLowerCase());
if(result==true)
  alert('this is true');
else 
  alert('this is false');

in diesem Fall .toLowerCase ist wichtig

0 Stimmen

Es wird jedoch nicht garantiert, dass ein Boolescher Wert zurückgegeben wird.

14voto

Sandip Nirmal Punkte 2000

Es gibt bereits so viele Antworten. Aber die folgenden können in einigen Szenarien nützlich sein.

// One can specify all values against which you consider truthy
var TRUTHY_VALUES = [true, 'true', 1];

function getBoolean(a) {
    return TRUTHY_VALUES.some(function(t) {
        return t === a;
    });
}

Dies kann nützlich sein, wenn man mit nicht-booleschen Werten arbeitet.

getBoolean('aa'); // false
getBoolean(false); //false
getBoolean('false'); //false

getBoolean('true'); // true
getBoolean(true); // true
getBoolean(1); // true

14voto

Friedrich Punkte 1601

Ich bin erstaunt, dass includes wurde nicht vorgeschlagen

let bool = "false"
bool = !["false", "0", 0].includes(bool)

Sie können die Prüfung auf "wahr" ändern oder weitere Bedingungen einbeziehen (z. B. null , '' ).

1 Stimmen

Hmm, das ist perfekt

0 Stimmen

Ich bin mit diesem Ansatz für einen Rahmen, der URL-Parameter analysiert und Parameter ohne Werte als leere Zeichenfolge, etwas wie enthält: example.com?useSpecialFeature endet als {useSpecialFeature:''}

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