440 Stimmen

Boolesches Ergebnis in Zahl/Ganzzahl umwandeln

Ich habe eine Variable, die Folgendes speichert false o true aber ich brauche 0 o 1 stattdessen. Wie kann ich das tun?

9 Stimmen

Hier ist ein Leistungsvergleich einiger der angebotenen Techniken: jsperf.com/umwandlung-von-boolean-zu-zahl .

6 Stimmen

Node.JS werden die Nutzer verwenden wollen bool === true ? 1 : 0 da er bei weitem der schnellste V8 ist.

6 Stimmen

Oder einfach bool ? 1 : 0;

689voto

lonesomeday Punkte 224087

Verwenden Sie die unär + Betreiber , die ihren Operanden in eine Zahl umwandelt.

+ true; // 1
+ false; // 0

Beachten Sie natürlich, dass Sie die Daten auf der Serverseite immer noch bereinigen sollten, da ein Benutzer beliebige Daten an Ihren Server senden kann, unabhängig davon, was der clientseitige Code sagt.

66 Stimmen

Es ist zwar cool (ich hatte nie daran gedacht), aber es ist unglaublich langsam (97 % langsamer in Chrome, um genau zu sein). Seien Sie auf der Hut!

0 Stimmen

@Qix Danke: Das ist faszinierend. Eigentlich nicht, es ist erstaunlich. Obwohl ein Vergleich mit dem Number-Konstruktor auch interessant wäre...

6 Stimmen

Vérifier diese Revision . Number() ist noch langsamer.

490voto

Andy Rose Punkte 16232

Javascript hat einen ternären Operator, den Sie verwenden können:

var i = result ? 1 : 0;

15 Stimmen

Beste Antwort. Warum? Das funktioniert mit truthiness, das allgemeiner ist und jeden Typ akzeptiert (String, Zahl, usw.) Die unary Antwort ist in der Tat clever, aber wenn ich ihr einen String übergebe, gibt sie NaN . Also, wenn Sie L33T wollen und die Eingabe garantieren, gehen urary, sonst methinks die ternary + truthy Test ist am besten.

0 Stimmen

Diese Lösung ist im Grunde die Minimierung eines if Anweisung unter Verwendung des ternären Operators.

3 Stimmen

Die ternäre Lösung ist eine der schnellsten Möglichkeiten. Andere Lösungen wie +true o Number(true) sind extrem langsam. Siehe Benchmark .

150voto

kralyk Punkte 3983

Imho ist das die beste Lösung:

fooBar | 0

Dies wird in asm.js verwendet, um den Integer-Typ zu erzwingen.

3 Stimmen

Einer der schnellsten; +1.

3 Stimmen

Gut gemacht. Sie könnten auch "Boolean ^ 0" verwenden. OR oder XOR funktioniert.

3 Stimmen

Dies wird keine Rückgabe einer 1 integer wird es, wenn fooBar nicht ist?

99voto

René Punkte 9554

Ich ziehe es vor, die Funktion Nummer . Sie nimmt ein Objekt und wandelt es in eine Zahl um.

Beispiel:

var myFalseBool = false;
var myTrueBool = true;

var myFalseInt = Number(myFalseBool);
console.log(myFalseInt === 0);

var myTrueInt = Number(myTrueBool);
console.log(myTrueInt === 1);

Sie können es in einem jsFiddle .

5 Stimmen

Dies ist die mit Abstand beste Antwort. Ganz unten natürlich. Nur "es braucht ein Objekt" ist nicht richtig.

3 Stimmen

Der Link zu mdn ist viel besser als w3schools(eeek!): developer.mozilla.org/de-US/docs/Web/JavaScript/Reference/

4 Stimmen

Meiner Meinung nach ist dies der beste Weg, weil er leicht zu lesen ist und die Absicht offenbart.

60voto

Philip Punkte 21490

Der getippte Weg dazu wäre:

Number(true) // 1
Number(false) // 0

2 Stimmen

Endlich eine anständige Antwort. Danke!

0 Stimmen

Die ternäre Lösung ist einer der schnellsten Wege. Andere Lösungen wie +true o Number(true) sind extrem langsam. Siehe Benchmark .

0 Stimmen

Dies funktioniert nicht und erzeugt in einigen Fällen NaN

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