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ückgibt1
für eine aufsteigende Sortierung,0
für eine absteigende Sortierung, und-1
für nicht gesetzt. Verwendung vonwhile (currentSortDirection() != desiredSortDirection) { sortColumn() }
funktioniert hervorragend, da-1 != true
y-1 != false
...aber dies zu ändern inwhile (Boolean(currentSortDirection) !== ...) {...}
Kräfte-1
in einetrue
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 aufasc
? 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 vondesiredSortDirection
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.107 Stimmen
"Gibt es einen besseren Weg, dies zu erreichen?" - Es gibt sicherlich einen schlechteren Weg :D
string=(string==String(string?true:false))?(string?true:false):(!string?true:false);
14 Stimmen
Einfacher Umgang mit Strings und Bools:
function parseBool(val) { return val === true || val === "true" }
0 Stimmen
Artikel mit guter Erklärung coding-issues.com/2015/11/
3 Stimmen
@Mark
function checkBool(x) { if(x) {return true;} else {return false;} }
4 Stimmen
@Sebi: Du hast vergessen, es zu dokumentieren:
if (checkBool(x) != false) { ... } else { ... }
9 Stimmen
!!(parseInt(value) || value === "true")
0 Stimmen
Das können Sie nicht, das ist unmöglich!
0 Stimmen
Nur eine Anmerkung. Ich bin immer wieder erstaunt über Javascript Ausdruck Parsing Regelsatz, zum Beispiel,
123+44+'2'+1
gibt"16721"
. Jedes + nach '2' wird als Verkettungsoperation interpretiert, wow :-D. PHP hingegen gibt 170 als Antwort, was transparenter ist, denn in PHP ist Plus nicht mehrdeutig - es wird nur für arithmetische Operationen verwendet. Verkettungsoperationen werden mit verschiedenen Operatoren durchgeführt0 Stimmen
Ich habe keine Antwort gefunden, die die Kombination undefined+string richtig löst. Also habe ich schließlich einen Einzeiler für diese Aufgabe geschrieben:
const StrToBool = (value) => !!value && value !== "false" && parseInt(value) !== 0;
Dieser Einzeiler führt zu folgenden Ergebnissen:StrToBool(undefined) => false, StrToBool('true') => true, StrToBool('false') => false, StrToBool('0') => false, StrToBool('Whatever') => true, StrToBool('1') => true
0 Stimmen
Warum sollten Sie das wollen?
0 Stimmen
Eine gute Lösung für diese Art von Konversionen ist die Nutzung einer Website wie converttypes.com wo Sie alle Konvertierungen für fast alle Programmiersprachen sehen können.
0 Stimmen
Eine gute Lösung für diese Art von Konvertierungen ist eine Website wie converttypes.com, auf der Sie alle Konvertierungen für fast alle Programmiersprachen sehen können.
0 Stimmen
!myVar.slice(4,5);
myVar = 'TRUE' // true
myVar = 'FALSE' // false
0 Stimmen
@AndrewLuca 's Antwort ist großartig - es behandelt undefined, null und alle anderen Typen. Sie betrachtet Zahlen, die nicht Null sind, als wahr, ebenso wie die Zeichenkette 'true'. Und das alles auf eine prägnante Weise.
0 Stimmen
toBool ={'false':false,'true':true } invertBool = {'false':true,'true':false}
kann verwendet werdentoBool[string]
0 Stimmen
JSON.parse('true') ist der einfachste Weg, um in einen booleschen Wert umzuwandeln.
1 Stimmen
3k Stimmen und 2,7 Mio. Aufrufe zu einem so einfachen Vorgang sagen alles aus, was man über die Qualität von Javascript als Sprache wissen muss.