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.

1voto

Justin Liu Punkte 543

Verwenden Sie eine if Aussage:

function parseBool(str) {
  if (str.toLowerCase() == 'true') {
    var val = true;
  } else if (str.toLowerCase() == 'false') {
    var val = false;
  } else {
    //If it is not true of false it returns undefined.//
    var val = undefined;
  }
  return val;
}
console.log(parseBool(''), typeof parseBool(''));
console.log(parseBool('TrUe'), typeof parseBool('TrUe'));
console.log(parseBool('false'), typeof parseBool('false'));

0voto

danday74 Punkte 44782

Die Funktion "toBoolean" liefert false für null, undefiniert, '', 'false'. Für jede andere Zeichenkette gibt sie true zurück:

const toBoolean = (bool) => {
  if (bool === 'false') bool = false
  return !!bool
}

toBoolean('false') // returns false

2 Stimmen

Bei "Falsch" würde also "true" zurückgegeben, oder nicht?

0 Stimmen

@OskarBerggren Das würde es nicht. Sehen Sie sich den Code an, if (bool === 'false') bool = false dann, wenn es läuft return !!bool es kehrt zurück !!false das ist false .

0 Stimmen

@JustinLiu jsfiddle wertet sicher aus toBoolean('False') a true was meiner Meinung nach keine gute Idee ist. In Bezug auf die eigentliche Frage, die sich auf eine Zeichenkette bezog, die einen booleschen Wert repräsentiert, halte ich es offen gesagt für eine schlechte Idee, einen true para "any "other" "random" "string" - eine Fehlermeldung auslösen, anstatt davon auszugehen, dass ein Anrufer, der eine fehlerhafte Zeichenkette gesendet hat, damit zufrieden ist, dass diese als true .

0voto

cypher Punkte 419

Das Folgende würde ausreichen

String.prototype.boolean = function() {
    return "true" == this; 
};

"true".boolean() // returns true "false".boolean() // returns false

13 Stimmen

Die Änderung des Prototyps ist eine sehr schlechte Idee

0 Stimmen

@SzymonWygnanski: Da bin ich anderer Meinung. Ich sehe keinen anderen Grund außer der for-in-Schleife und der nativen Unterstützung der gleichen Funktionalität durch die Browser. Bezüglich der for-in-Schleife: mir fällt kein Fall ein, in dem for-in-Schleifen in Strings wirklich benötigt werden. Reg native Unterstützung: wir können auf jeden Fall ein proto prop hinzufügen, bis native Browser unterstützen, wenn wir nicht ein Framework wie - Prototyp oder Jquery, etc. bauen. Mehr dazu von @Kangax (Perfection kills) ist hier. webcache.googleusercontent.com/

1 Stimmen

Bedenken Sie: Wir können sogar noch weiter gehen: "true".checkbox() würde sich in checkbox umwandeln, oder "true".application() würde sich in app umwandeln:D Nicht nur for-in-Schleifen schlagen fehl, auch der Stil ist hier falsch. Wo würden Sie den Code dieser "boolean/checkbox/application"-Definition in einer großen Anwendung suchen? Stellen Sie sich eine Welt vor, in der jede Bibliothek auf diese Weise denkt. Ist es nicht viel besser, eine Klasse oder Funktion zu definieren: checkbox("true") - das ist einfach sauberer und hat fast die gleiche Anzahl von Buchstaben. Man weiß nie, ob die Browser Ihre benutzerdefinierte Funktion unterstützen, bis sie als Standard definiert ist (wie Object.create etc...).

-1voto

guest271314 Punkte 1

Sie können verwenden Function zur Rückgabe einer Boolean Wert aus String "true" ou "false"

const TRUE_OR_FALSE = str => new Function(`return ${str}`)();

const [TRUE, FALSE] = ["true", "false"];

const [T, F] = [TRUE_OR_FALSE(TRUE), TRUE_OR_FALSE(FALSE)];

console.log(T, typeof T); // `true` `"boolean"`

console.log(F, typeof F); // `false` `"boolean"`

-1voto

Kal Punkte 1211

Einfache Ein-Zeilen-Operation, wenn Sie Boolean benötigen false y true aus den Zeichenkettenwerten:

storeBooleanHere = stringVariable=="true"?true:false;
  • storeBooleanHere - Diese Variable enthält den booleschen Wert
  • stringVariable - Variable, die boolesch als String gespeichert ist

0 Stimmen

Vereinfachte Version: storeBooleanHere = stringVariable.toLowerCase() !== 'false' ;

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