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

purab Punkte 211

Sie brauchen die Zeichenkette auch nicht in einen booleschen Wert umzuwandeln, sondern können einfach Folgendes verwenden var yourstring = yourstringValue == 1 ? true : false;

1voto

Steve Mc Punkte 3273
var trueVals = ["y", "t", "yes", "true", "gimme"];
var isTrueSet = (trueVals.indexOf(myValue) > -1) ? true : false;

oder auch nur

var trueVals = ["y", "t", "yes", "true", "gimme"];
var isTrueSet = (trueVals.indexOf(myValue) > -1);

Ähnlich wie einige der Switch-Anweisungen, aber kompakter. Der zurückgegebene Wert ist nur wahr, wenn die Zeichenkette eine der trueVals-Zeichenketten ist. Alles andere ist falsch. Natürlich sollten Sie die Eingabezeichenfolge normalisieren, um sie klein zu schreiben und Leerzeichen zu entfernen.

1voto

Surya R Praveen Punkte 2847

String in Booleschen Wert umwandeln

var vIn = "true";
var vOut = vIn.toLowerCase()=="true"?1:0;

String in Zahl umwandeln

var vIn = 0;
var vOut = parseInt(vIn,10/*base*/);

1voto

olegtaranenko Punkte 3537

Ich hoffe, dies ist ein möglichst umfassender Anwendungsfall

function parseBoolean(token) {
  if (typeof token === 'string') {
    switch (token.toLowerCase()) {
      case 'on':
      case 'yes':
      case 'ok':
      case 'ja':
      case '':
      // case '':
      // case '':
        token = true;
        break;
      default:
        token = false;
    }
  }
  let ret = false;
  try {
    ret = Boolean(JSON.parse(token));
  } catch (e) {
    // do nothing or make a notification
  }
  return ret;
}

1voto

sçuçu Punkte 2770

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);

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