Wood-eye sei vorsichtig. Nachdem ich gesehen habe, welche Konsequenzen es hat, wenn man die beste Antwort mit mehr als 500 Bewertungen anwendet, fühle ich mich verpflichtet, etwas zu schreiben, das tatsächlich nützlich ist:
Beginnen wir mit dem kürzesten, aber sehr strengen Weg:
var str = "true";
var mybool = JSON.parse(str);
Und mit einer angemessenen, toleranteren Art zu enden:
var parseBool = function(str)
{
// console.log(typeof str);
// strict: JSON.parse(str)
if(str == null)
return false;
if (typeof str === 'boolean')
{
return (str === true);
}
if(typeof str === 'string')
{
if(str == "")
return false;
str = str.replace(/^\s+|\s+$/g, '');
if(str.toLowerCase() == 'true' || str.toLowerCase() == 'yes')
return true;
str = str.replace(/,/g, '.');
str = str.replace(/^\s*\-\s*/g, '-');
}
// var isNum = string.match(/^[0-9]+$/) != null;
// var isNum = /^\d+$/.test(str);
if(!isNaN(str))
return (parseFloat(str) != 0);
return false;
}
Prüfung:
var array_1 = new Array(true, 1, "1",-1, "-1", " - 1", "true", "TrUe", " true ", " TrUe", 1/0, "1.5", "1,5", 1.5, 5, -3, -0.1, 0.1, " - 0.1", Infinity, "Infinity", -Infinity, "-Infinity"," - Infinity", " yEs");
var array_2 = new Array(null, "", false, "false", " false ", " f alse", "FaLsE", 0, "00", "1/0", 0.0, "0.0", "0,0", "100a", "1 00", " 0 ", 0.0, "0.0", -0.0, "-0.0", " -1a ", "abc");
for(var i =0; i < array_1.length;++i){ console.log("array_1["+i+"] ("+array_1[i]+"): " + parseBool(array_1[i]));}
for(var i =0; i < array_2.length;++i){ console.log("array_2["+i+"] ("+array_2[i]+"): " + parseBool(array_2[i]));}
for(var i =0; i < array_1.length;++i){ console.log(parseBool(array_1[i]));}
for(var i =0; i < array_2.length;++i){ console.log(parseBool(array_2[i]));}
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.