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.

8voto

OhkaBaka Punkte 337

Heiliger Gott, einige dieser Antworten sind einfach wild. Ich liebe JS und seine unendliche Anzahl von Möglichkeiten, einen Bool zu häuten.

Ich war schockiert, dass ich das nicht schon gesehen habe:

testVar = testVar.toString().match(/^(true|[1-9][0-9]*|[0-9]*[1-9]+|yes)$/i) ? true : false;

8voto

risingfish Punkte 31

Der einfachste Weg (unter der Annahme, dass die Zeichenkette 'true' oder 'false' ist) ist zweifellos:

var z = 'true';
var y = 'false';
var b = (z === 'true'); // will evaluate to true
var c = (y === 'true'); // will evaluate to false

Immer Verwenden Sie für diese Art von Konvertierungen den Operator === anstelle des Operators ==!

4 Stimmen

Von welcher Umrechnung sprachen Sie? :-)

2 Stimmen

Beim Vergleich String in Javascript gibt es keinen Unterschied zwischen der Verwendung der == oder === Operatoren, wenn nicht mit Konvertierungen. Hier sind Sie vergleichen, um Zeichenfolgen, daher keine Typ-Konvertierungen. Siehe stackoverflow.com/questions/359494/

7voto

panatoni Punkte 605

Das ist die einfachste Methode, die ich immer anwende:

let value = 'true';
let output = value === 'true';

4 Stimmen

Ein ternärer Operator ist nicht erforderlich. Nur mit let output = value === 'true' funktioniert.

0 Stimmen

Let value = 'true'; let output = value === 'true' ? true : false; output = true; let value = 'false'; let output = value === 'true' ? true : false; output = false; Was funktioniert hier nicht?

1 Stimmen

Entschuldigung, das war ein Missverständnis. Das funktioniert perfekt, aber es ist redundant. value === 'true' gibt bereits einen booleschen Wert zurück und der ternäre Operator ist nicht notwendig.

7voto

BishopZ Punkte 6049

Meiner Meinung nach sollen mit dieser Frage drei Ziele erreicht werden:

  • Gibt true/false für wahre und falsche Werte zurück, aber auch true/false für mehrere String-Werte, die wahr oder falsch wären, wenn sie Booleans statt Strings wären.
  • Zweitens: Bereitstellung einer robusten Schnittstelle, so dass andere als die angegebenen Werte nicht fehlschlagen, sondern einen Standardwert zurückgeben
  • Drittens sollte dies alles mit so wenig Code wie möglich geschehen.

Das Problem bei der Verwendung von JSON ist, dass es einen Javascript-Fehler verursacht. Diese Lösung ist nicht belastbar (obwohl sie die Anforderungen von 1 und 3 erfüllt):

JSON.parse("FALSE") // fails

Diese Lösung ist nicht prägnant genug:

if(value === "TRUE" || value === "yes" || ...) { return true; }

Ich arbeite an der Lösung genau dieses Problems für Typecast.js . Und die beste Lösung für alle drei Ziele ist diese:

return /^true$/i.test(v);

Sie funktioniert in vielen Fällen, schlägt nicht fehl, wenn Werte wie {} übergeben werden, und ist sehr prägnant. Außerdem gibt es false als Standardwert zurück, anstatt undefiniert zu sein oder einen Fehler auszulösen, was bei der Entwicklung von Javascript mit lockerer Typisierung nützlicher ist. Bravo an die anderen Antworten, die es vorgeschlagen haben!

0 Stimmen

Um noch einmal auf Ihre Ziele zurückzukommen: Das einzige Problem mit Ihrer dritten und besten Lösung ist, dass sie Ziel Nr. 1 nicht erfüllt - sie gibt nur true für einen Wert von 'true' , aber nicht für einen wahrheitsgemäßen Beitrag. Um das Ziel Nr. 1 zu erfüllen, ist es nur leicht prägnanter als Lösung #2 und weit weniger lesbar.

0 Stimmen

return /^(true|yes|1|t|y)$/i.test(str);

6voto

Sigit Punkte 608
const boolTrue = JSON.parse("true")
const boolFalse = JSON.parse("false")

console.log(boolTrue) // true
console.log(boolFalse) // false

Um eine boolesche Zeichenkette wie "true" in einen tatsächlichen booleschen Wert umzuwandeln, muss man nur mit JSON.parse() Beispiel: JSON.parse("true")

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