2013-02-09 22 views
40

Inoltre:Converti True-> 1 e False-> 0 in Javascript?

true ? 1 : 0

c'è qualche breve trucchetto che può "tradurre" True->1 e False->0 in Javascript?

Ho cercato ma non ho trovato alcuna alternativa

Cosa cosa si intende per "corto trucco"?

risposta: stesso ~~6.6 è un trucco per Math.floor

+1

Probabilmente non hai bisogno di farlo. Qualsiasi operazione aritmetica convertirà comunque i tuoi booleani: ad esempio 'true + true + true == 3' – Eric

+1

Qualsiasi operatore che converte i suoi operandi in valori numerici lo farà. Elenco di tutti gli operatori: http://es5.github.com/#x11-toc. –

+0

@FelixKling puoi correggere il collegamento? –

risposta

118

sacco di modi per farlo

// 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 

È inoltre possibile utilizzare la divisione per 1, true/1; // 1, ma vorrei consigliare di evitare divisione dove possibile.

Inoltre, molti degli operatori non unari hanno un assignment version quindi se si ha una variabile che si desidera convertire, è possibile farlo molto rapidamente.

È possibile visualizzare un confronto dei diversi metodi con this jsperf.

+0

potete elaborarlo su >>>? –

+1

'>>>' è [_Zero-fill right shift_] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators# >>> _% 28Zero-fill_right_shift% 29) operatore bit a bit. 'x >>> y' significa" sposta ogni bit in 'x' a destra di' y', riempiendo le colonne ora vuote con '0'". Scegliere 'y = 0' significa che non stai spostando i bit da nessuna parte, ma continua a fare il cast. –

+0

wo ...... guarda il jsperf. Ive appena testato con FF. guarda le differenze. –

8

È possibile utilizzare ~~boolean, dove boolean è (ovviamente) un valore booleano.

~~true // 1 
~~false // 0 
+0

+1 Non posso credere di aver fornito lo stesso uso di esempio. (e non pensate che sia accettabile anche qui) –

12

... oppure è possibile utilizzare +true e +false