2013-02-09 14 views
40

:Javascript'te True-> 1 ve False-> 0'ı dönüştürün? Ayrıca

true ? 1 : 0

JavaScript True->1 ve False->0 "tercüme" herhangi kısa bir hile var mı?

ı aradık ama herhangi bir alternatif

siz "kısa hile" le ne demek bulamadı?

cevap: ~~6.6 aynı boolean (besbelli) bir boolean nerede olduğunu ~~boolean kullanabilirsiniz Math.floor

+1

Şansı muhtemelen bunu yapmak gerekmez vardır. Herhangi aritmetik işlem zaten senin boole dönüştürür: örneğin 'gerçek + gerçek + gerçek == 3 ' – Eric

+1

yapacak sayısal değerlere onun işlenen dönüştürür herhangi bir operatör. Tüm operatörlerin listesi: http://es5.github.com/#x11-toc. –

+0

@FelixKling bağlantıyı düzeltebilir misiniz? –

cevap

118

sürü bu

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

Ayrıca 1, true/1; // 1 tarafından bölünmesini kullanabilirsiniz, ancak ben kaçınarak tavsiye ederiz Mümkün olduğunda bölünme.

Ayrıca, sigara tekli operatörlerden birçok size dönüştürülen istediğiniz bir değişken eğer öyleyse, bunu çok çabuk yapabileceğiniz bir assignment version var.

Sen this jsperf ile farklı yöntemlerin bir karşılaştırmasını görebilirsiniz.

+0

>>>? –

+1

'>>>' dır [sağ ÜSTKARAKTER_ _Zero doldurma] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators# >>> _% 28Zero-fill_right_shift% 29) bitsel operatör. 'x >>> y'," x'de her biti "y" ile sağa kaydırın, şimdi boş sütunları "0" ile doldurun. 'Y = 0' öğesini seçmek için, bitleri herhangi bir yere taşımanız anlamına gelir, ancak yine de yayın yapar. –

+0

wo ...... jsperf'e bakın. Sadece FF ile test ettim. farklılıklara bakın. –

8

için bir hile. Dolayısıyla kendine ait

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

+1 Aynı örnek kullanımı sağladığımı sanmıyorum. (Ve burada da kabul edilebilir olduğunu düşünmüyordu) –

İlgili konular