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.

6voto

CMCDragonkai Punkte 5795

Ich habe eine Funktion geschrieben, die mit PHPs filter_var übereinstimmt und dies gut macht. Verfügbar in einem Gist: https://gist.github.com/CMCDragonkai/7389368

/**
 * Parses mixed type values into booleans. This is the same function as filter_var in PHP using boolean validation
 * @param  {Mixed}        value 
 * @param  {Boolean}      nullOnFailure = false
 * @return {Boolean|Null}
 */
var parseBooleanStyle = function(value, nullOnFailure = false){
    switch(value){
        case true:
        case 'true':
        case 1:
        case '1':
        case 'on':
        case 'yes':
            value = true;
            break;
        case false:
        case 'false':
        case 0:
        case '0':
        case 'off':
        case 'no':
            value = false;
            break;
        default:
            if(nullOnFailure){
                value = null;
            }else{
                value = false;
            }
            break;
    }
    return value;
};

0 Stimmen

Ihre war fast das, was ich gesucht habe. Hier ist meine Variante: ```` function parseBool( value, nullOnFailure = false ) { let value2 = parseFloat( value ) if( !isNaN( value2 )) return !!value2 if( typeof value !== 'string' ) return !!value switch( value.trim().toLowerCase() ) { case 't': case 'true': case 'on': case 'y': case 'yes': return true case 'f': case 'false': case 'off': case 'n': case 'no': return false default: return nullOnFailure ? null : false } } ```

6voto

ecabuk Punkte 1501
function isTrue(val) {
    try {
        return !!JSON.parse(val);
    } catch (e) {
        return false;
    }
}

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.

5voto

Chanakya Vadla Punkte 2969
String(true).toLowerCase() == 'true'; // true
String("true").toLowerCase() == 'true'; // true
String("True").toLowerCase() == 'true'; // true
String("TRUE").toLowerCase() == 'true'; // true

String(false).toLowerCase() == 'true'; // false

Wenn Sie sich über die Eingabe nicht sicher sind, funktioniert das obige Verfahren für boolesche Werte und auch für beliebige Zeichenfolgen.

0 Stimmen

Oder true.toString()==='true' . Außerdem, warum machen Sie String(true) y String('true') Kleinbuchstaben? lol

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';

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