In HTML werden die Werte von Attributen schließlich zu Zeichenketten. Um dies in unerwünschten Situationen abzumildern, können Sie eine Funktion haben, die sie bedingt in Werte umwandelt, die sie in JavaScript oder einer anderen Programmiersprache von Interesse darstellen.
Im Folgenden wird erklärt, wie man den booleschen Typ aus dem String-Typ wiederbelebt, aber es kann auch auf andere Datentypen wie Zahlen, Arrays oder Objekte ausgeweitet werden.
Darüber hinaus hat JSON.parse eine Wiederbelebungsparameter was eine Funktion ist. Es kann auch verwendet werden, um das gleiche zu erreichen.
Rufen wir eine Zeichenkette auf, die wie eine boolean , "wahr", a boolesche Zeichenkette Ebenso können wir eine Zeichenkette wie eine Zahl, "1", eine Zahlenfolge . Dann können wir feststellen, ob eine Zeichenkette ein boolesche Zeichenkette :
const isBooleanString = (string) => ['true', 'false'].some(item => item === string);
Danach müssen wir die boolesche Zeichenkette als JSON von JSON.parse
Methode:
JSON.parse(aBooleanString);
Allerdings ist jede Zeichenkette, die nicht eine boolesche Zeichenkette , Zahlenfolge oder ein beliebiges stringifiziertes Objekt oder Array (jedes ungültige JSON) führt dazu, dass die JSON.parse
Methode zum Auslösen einer SyntaxError
.
Sie müssen also wissen, wie Sie es nennen sollen, d. h. ob es sich um eine boolesche Zeichenkette . Sie können dies erreichen, indem Sie eine Funktion schreiben, die die obige Definition boolesche Zeichenkette prüfen und anrufen JSON.parse
:
function parse(string){
return isBooleanString(string) ? JSON.parse(string)
: string;
}
Man kann den Begriff weiter verallgemeinern isBooleanString
eine umfassendere Sichtweise auf die Frage, was als boolesche Zeichenkette durch weitere Parametrisierung zur Annahme eines optionalen Arrays akzeptierter boolean Streicher:
const isBooleanString = (string, spec = ['true', 'false', 'True', 'False']) => spec.some(item => item === string);
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.