Konvertieren Sie True-> 1 und False-> 0 in Javascript?

71

Außerdem :

true ? 1 : 0

Gibt es einen kurzen Trick, der "übersetzen" True->1und False->0in Javascript?

Ich habe gesucht, aber keine Alternative gefunden

Was meinst du mit "kurzer Trick"?

Antwort: Gleich wie ~~6.6ein Trick fürMath.floor

Royi Namir
quelle
1
Wahrscheinlich müssen Sie dies nicht tun. Jede arithmetische Operation konvertiert sowieso Ihre Booleschen Werte: zBtrue + true + true == 3
Eric
1
Jeder Operator, der seine Operanden in numerische Werte konvertiert, ist ausreichend. Liste aller Operatoren: es5.github.com/#x11-toc .
Felix Kling
@FelixKling Kannst du bitte den Link reparieren?
Royi Namir
Es sollte automatisch umleiten, aber hier ist es: es5.github.io/#x11-toc (wenn Sie das meinen).
Felix Kling
@FelixKling ja aus irgendeinem Grund funktioniert es jetzt. bevor es nicht tat
Royi Namir

Antworten:

187

Viele Möglichkeiten, dies zu tun

// implicit cast
+true; // 1
+false; // 0
// bit shift by zero
true >>> 0; // 1, right zerofill
false >>> 0; // 0
true << 0; // 1, left
false << 0; // 0
// double bitwise NOT
~~true; // 1
~~false; // 0
// bitwise OR ZERO
true | 0; // 1
false | 0; // 0
// bitwise AND ONE
true & 1; // 1
false & 1; // 0
// bitwise XOR ZERO, you can negate with XOR ONE
true ^ 0; // 1
false ^ 0; // 0
// even PLUS ZERO
true + 0; // 1
false + 0; // 0
// and MULTIPLICATION by ONE
true * 1; // 1
false * 1; // 0

Sie können auch die Division durch verwenden 1, true / 1; // 1aber ich würde empfehlen, die Division nach Möglichkeit zu vermeiden.

Darüber hinaus haben viele nicht unäre Operatoren eine Zuweisungsversion. Wenn Sie also eine Variable haben, die Sie konvertieren möchten, können Sie dies sehr schnell tun.

Sie können einen Vergleich der verschiedenen Methoden mit diesem jsperf sehen .

Paul S.
quelle
Können Sie >>> näher erläutern?
Royi Namir
1
>>>ist der bitweise Nullverschiebungs-Rechtsverschiebungsoperator . x >>> ybedeutet "Bewegen Sie jedes Bit xnach rechts y, indem Sie die jetzt leeren Spalten mit 0" füllen . Zu wählen y = 0bedeutet, dass Sie die Bits nirgendwo hin bewegen, aber trotzdem die Besetzung übernehmen.
Paul S.
@ RoyiNamir Ich denke, Sie werden feststellen, dass dies hauptsächlich auf das Alter der Maschine zurückzuführen ist, auf der ich mich befinde. BEARBEITEN oder nicht! Ich bin erstaunt darüber. Firefox muss einige ernsthafte Verbesserungen am Code vorgenommen haben.
Paul S.
13

... oder Sie können +trueund verwenden+false

bsiamionau
quelle
12

Ein anderer Weg könnte sein Number()

Number(true) // = 1
Number(false) // = 0
Muhammad
quelle
Ich komme aus einem typisierten Hintergrund und bevorzuge diesen Weg, da explizit klar ist, was Sie zurückbekommen. Ich schaue mir einige Beispiele in der akzeptierten Antwort an und konnte Ihnen ehrlich gesagt nicht sagen, was das Ergebnis sein würde 😅
micnguyen
11

Sie können verwenden ~~boolean, wo boolean(offensichtlich) ein Boolescher Wert ist.

~~true  // 1
~~false // 0
Wirbel
quelle
+1 Ich kann nicht glauben, dass ich die gleiche Beispielverwendung geliefert habe. (und dachte nicht, dass es auch hier akzeptabel ist)
Royi Namir