3594 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.

5voto

benipsen Punkte 474

Hier gibt es viele ausgefallene Antworten. Wirklich überrascht, dass niemand diese Lösung gepostet hat:

var booleanVal = toCast > '';

Dies führt in den meisten Fällen zu true, außer bei bool false, der Zahl zero und der leeren Zeichenkette (offensichtlich). Sie können leicht nach anderen falschen String-Werten suchen, z.B.:

var booleanVal = toCast > '' && toCast != 'false' && toCast != '0';

5voto

Al Albers Punkte 51

Wenn Sie sicher sind, dass der Testgegenstand immer eine Zeichenkette ist, können Sie explizit prüfen, ob er gleich ist true ist die beste Wahl.

Vielleicht sollten Sie ein zusätzliches Stück Code einfügen, nur für den Fall, dass der Betreff tatsächlich ein Boolescher Wert sein könnte.

var isTrueSet =
    myValue === true ||
    myValue != null &&
    myValue.toString().toLowerCase() === 'true';

Dies könnte Ihnen in Zukunft ein wenig Arbeit ersparen, wenn der Code verbessert/refactored wird, um echte boolesche Werte anstelle von Strings zu verwenden.

4voto

Ratan Uday Kumar Punkte 4494

In nodejs durch Verwendung von node-boolify es ist möglich

Boolesche Konvertierungsergebnisse

Boolify(true); //true
Boolify('true'); //true
Boolify('TRUE'); //null
Boolify(1); //true
Boolify(2); //null
Boolify(false); //false
Boolify('false'); //false
Boolify('FALSE'); //null
Boolify(0); //false
Boolify(null); //null
Boolify(undefined); //null
Boolify(); //null
Boolify(''); //null

7 Stimmen

Ich würde lieber keine neue Abhängigkeit in das Projekt einführen, nur um einen String in einen Boolean zu konvertieren.

0 Stimmen

Es ist sehr geringes Gewicht und auch u können validieren, ob String ist boolesch

0 Stimmen

Für eine so einfache Aufgabe wäre eine Bibliothek nicht wünschenswert, vor allem wenn die Bibliothek kontrolliert, wie ein Boolescher Wert definiert wird.

4voto

Richard Torcato Punkte 2044

Es wäre schön, wenn es eine Funktion für das String-Objekt gäbe, die dies für uns erledigt, aber wir können leicht unsere eigenen Prototypen hinzufügen, um das String-Objekt zu erweitern.

Fügen Sie diesen Code irgendwo in Ihrem Projekt ein, bevor Sie ihn verwenden.

String.prototype.toBoolean = function() {
   return String(this.valueOf()).toLowerCase() === true.toString();
};

Probieren Sie es so aus:

var myValue = "false"
console.log("Bool is " + myValue.toBoolean())
console.log("Bool is " + "False".toBoolean())
console.log("Bool is " + "FALSE".toBoolean())
console.log("Bool is " + "TRUE".toBoolean())
console.log("Bool is " + "true".toBoolean())
console.log("Bool is " + "True".toBoolean())

Das Ergebnis der ursprünglichen Frage wäre dann also folgendes:

var myValue = document.myForm.IS_TRUE.value;
var isTrueSet = myValue.toBoolean();

0 Stimmen

Boolean.prototype wird in allen Browsern vollständig unterstützt

4voto

cskwg Punkte 601
/// Convert something to boolean
function toBoolean( o ) {
    if ( null !== o ) {
        let t = typeof o;
        if ( "undefined" !== typeof o ) {
            if ( "string" !== t ) return !!o;
            o = o.toLowerCase().trim();
            return "true" === o || "1" === o;
        }
    }
    return false;
}

toBoolean(false) --> false
toBoolean(true) --> true
toBoolean("false") --> false
toBoolean("true") --> true
toBoolean("TRue") --> true
toBoolean("1") --> true
toBoolean("0") --> false
toBoolean(1) --> true
toBoolean(0) --> false
toBoolean(123.456) --> true
toBoolean(0.0) --> false
toBoolean("") --> false
toBoolean(null) --> false
toBoolean() --> false

0 Stimmen

Das ist so großartig und nützlich - vielen Dank!

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