Ich habe eine Variable, die false
oder speichert true
, aber ich brauche 0
oder 1
stattdessen. Wie kann ich das machen?
275
Ich habe eine Variable, die false
oder speichert true
, aber ich brauche 0
oder 1
stattdessen. Wie kann ich das machen?
bool === true ? 1 : 0
, da es bei weitem das schnellste in V8 ist.bool ? 1 : 0;
Antworten:
Javascript hat einen ternären Operator, den Sie verwenden können:
quelle
NaN
. Wenn Sie also L33T möchten und die Eingabe garantieren möchten, gehen Sie urary, andernfalls ist der ternäre + Wahrheitstest am besten.Verwenden Sie den unären
+
Operator , der seinen Operanden in eine Zahl konvertiert.Beachten Sie natürlich, dass Sie die Daten auf der Serverseite weiterhin bereinigen sollten, da ein Benutzer alle Daten an Ihren Server senden kann, unabhängig davon, was der clientseitige Code sagt.
quelle
Number()
ist noch langsamer.bool === true ? 1 : 0
das schnellste zu sein, mit einer knappen Sekunde vonbool | 0
.Imho die beste Lösung ist:
Dies wird in asm.js verwendet, um den Integer-Typ zu erzwingen.
quelle
1
Ganzzahl zurückgeben, wenn fooBar nicht ist?Ich bevorzuge die Zahlenfunktion . Es nimmt ein Objekt und wandelt es in eine Zahl um.
Beispiel:
Sie können es in einer jsFiddle testen .
quelle
Ich habe einen JSperf- Vergleich aller vorgeschlagenen Antworten erstellt.
TL; DR - die beste Option für alle aktuellen Browser ist:
.
Aktualisieren:
Es scheint, dass sie heutzutage alle ziemlich identisch sind, außer dass die
Number()
Funktion die langsamste und die beste istval === true ? 1 : 0;
.quelle
Der typisierte Weg, dies zu tun, wäre:
quelle
Ich bin heute gerade auf diese Abkürzung gestoßen.
~~ (wahr)
~~ (falsch)
Leute viel schlauer als ich erklären kann:
http://james.padolsey.com/javascript/double-bitwise-not/
quelle
Wenn JavaScript einen Zahlenwert erwartet, aber stattdessen einen Booleschen Wert empfängt, wird dieser Boolesche Wert in eine Zahl konvertiert: true und false konvertieren in 1 bzw. 0. Sie können dies also nutzen.
Lesen Sie weiter Typ Conversions Kapitel 3.8 des Definitiven Handbuchs zu Javascript.
quelle
Der unäre
+
Operator wird sich darum kümmern:Sie sollten dies natürlich vor dem Speichern auf dem Server überprüfen, damit dies ohnehin sinnvoller ist.
quelle
===
, weiltrue == 1
es auch ohne die "explizite Konvertierung wahr ist :-) isttrue === 1
stattdessen falsch.Ich habe mich gerade mit diesem Problem in einem Code befasst, den ich geschrieben habe. Meine Lösung war, ein bitweises und zu verwenden.
Ein schnellerer Weg, um ein ständiges Problem zu lösen, wäre das Erstellen einer Funktion. Es ist für andere besser lesbar, besser für das Verständnis in der Wartungsphase und beseitigt das Potenzial, etwas Falsches zu schreiben.
Bearbeiten - 10. September 2014
Aus irgendeinem Grund ist in Chrome keine Konvertierung mit einem ternären Operator, der mit dem Operator identisch ist, schneller. Es macht keinen Sinn, warum es schneller ist, aber ich nehme an, es ist eine Art Low-Level-Optimierung, die irgendwo auf dem Weg Sinn macht.
Testen Sie selbst: http://jsperf.com/boolean-int-conversion/2
In FireFox und Internet Explorer ist die Verwendung der von mir veröffentlichten Version im Allgemeinen schneller.
Bearbeiten - 14. Juli 2017
Okay, ich werde dir nicht sagen, welches du verwenden sollst oder nicht. Jeder verdammte Browser hat sich auf und ab bewegt, wie schnell er die Operation mit jeder Methode ausführen kann. In Chrome war die bitweise Version besser als die anderen, aber dann war es plötzlich viel schlimmer. Ich weiß nicht, was sie tun, also werde ich es einfach bei wem belassen. Es gibt selten einen Grund, sich darum zu kümmern, wie schnell eine solche Operation durchgeführt wird. Selbst auf dem Handy ist es eine Nichts-Operation.
Hier ist auch eine neuere Methode zum Hinzufügen eines 'toInt'-Prototyps, der nicht überschrieben werden kann.
quelle
Sie können auch 0 hinzufügen, Shift-Operatoren oder xor verwenden:
Diese haben ähnliche Geschwindigkeiten wie die anderen Antworten.
quelle
In meinem Kontext ist React Native, wo ich den Opazitätswert vom Booleschen Wert erhalte, der einfachste Weg: Verwenden Sie den Operator unary +.
Dies wandelt den Booleschen Wert in eine Zahl um.
quelle
Sie können dies tun, indem Sie einfach den booleschen Prototyp erweitern
Es ist nicht leicht zu verstehen, was dort vor sich geht, also wäre eine alternative Version
getan zu haben, was man so machen kann
Wenn ich Boolesche Werte zum Speichern von Bedingungen verwende, konvertiere ich sie häufig in Bitfelder. In diesem Fall verwende ich eine erweiterte Version der Prototypfunktion
womit du machen kannst
welches 4 als seine Ausgabe erzeugt.
quelle
quelle
Versuchen
Code-Snippet anzeigen
quelle
Ich habe alle diese Beispiele getestet, einen Benchmark durchgeführt und schließlich empfehle ich Ihnen, den kürzeren zu wählen, da dies keinen Einfluss auf die Leistung hat.
Ergebnis
quelle
Wenn Sie möchten, dass sich der ganzzahlige x-Wert ändert, wenn 1 bis 0 und wenn 0 bis 1, können Sie (x + 1)% 2 verwenden
quelle