Değerlerinizi bir diziye yerleştirin ve öğenizin dizide olup olmadığını kontrol edin:
if ([1, 2, 3, 4].includes(test.type)) {
// Do something
}
Desteklediğiniz bir tarayıcıda Array#includes
yöntem yoksa, bu çoklu dolguyu kullanabilirsiniz .
~
Yaklaşık işareti kısayolunun kısa açıklaması :
Güncelleme: Şimdi includes
yönteme sahip olduğumuzdan, artık ~
kesmek kullanmanın bir anlamı yok. Sadece burada nasıl çalıştığını ve / veya başkalarının kodunda karşılaştığını bilmek isteyen insanlar için burada tutmak.
Yerine sonucu, denetimi indexOf
olduğunu >= 0
, güzel küçük bir kısayol vardır:
if ( ~[1, 2, 3, 4].indexOf(test.type) ) {
// Do something
}
İşte keman: http://jsfiddle.net/HYJvK/
Bu nasıl çalışıyor? Dizide bir öğe bulunursa indexOf
, dizinini döndürür. Öğe bulunamadı ise, geri dönecektir -1
. Çok fazla ayrıntıya girmeden, ~
bir olduğunu bitsel NOT operatörü dönecektir, 0
sadece -1
.
~
Kısayolu kullanmayı seviyorum , çünkü dönüş değeri üzerinde bir karşılaştırma yapmaktan daha özlü. Ben JavaScript in_array
doğrudan (PHP benzer) bir Boolean döndüren bir işlevi olurdu isterdim , ama bu sadece arzulu düşünme ( Güncelleme: şimdi yapar. Denir includes
. Yukarıya bakınız). Not jQuery en olduğunu inArray
, PHP'nin yöntem imzası, aslında taklit yerli paylaşırken indexOf
(dizin gerçekten sonra ne konum ise, farklı durumlarda yararlıdır) işlevselliği.
Önemli not: tilde kısayol kullanma bazıları, tartışmalara sarıldı gibi görünüyor şiddetle kod yeterince açık değildir ve her ne pahasına (Bu yanıt hakkındaki bakınız) kaçınılmalıdır inanıyoruz. Duygularını paylaşırsanız, .indexOf(...) >= 0
çözüme bağlı kalmalısınız .
Biraz daha uzun açıklama:
JavaScript'teki tamsayılar imzalanır, yani en soldaki bit işaret biti olarak ayrılır; sayının pozitif mi negatif mi olduğunu gösteren bir bayrak 1
.
32 bit ikili biçimde bazı örnek pozitif sayılar:
1 : 00000000000000000000000000000001
2 : 00000000000000000000000000000010
3 : 00000000000000000000000000000011
15: 00000000000000000000000000001111
Şimdi burada aynı sayılar var, ancak negatif:
-1 : 11111111111111111111111111111111
-2 : 11111111111111111111111111111110
-3 : 11111111111111111111111111111101
-15: 11111111111111111111111111110001
Negatif sayılar için neden bu kadar garip kombinasyonlar? Basit. Negatif bir sayı, pozitif sayının + 1'in tersidir; negatif sayıyı pozitif sayıya eklemek her zaman vermelidir 0
.
Bunu anlamak için basit bir ikili aritmetik yapalım.
Burada eklersiniz nasıl -1
için +1
:
00000000000000000000000000000001 +1
+ 11111111111111111111111111111111 -1
-------------------------------------------
= 00000000000000000000000000000000 0
Ve burada eklersiniz nasıl -15
için +15
:
00000000000000000000000000001111 +15
+ 11111111111111111111111111110001 -15
--------------------------------------------
= 00000000000000000000000000000000 0
Bu sonuçları nasıl elde ederiz? Düzenli olarak ekleyerek, okulda bize öğretildiği şekilde: en sağdaki sütundan başlarsınız ve tüm satırları toplarsınız. Toplam, en büyük tek haneli sayıdan büyükse (ondalık sayı 9
, ancak ikili sayıdır 1
), kalan kısmı bir sonraki sütuna taşırız.
Şimdi, fark edeceğiniz gibi, pozitif sayısına negatif bir sayı eklerken, hepsi 0
s olmayan en sağdaki sütunda her zaman iki 1
s olacaktır 2
; İki varlığın ikili gösterimi , sonraki sütuna 10
taşıyoruz ve sonuç için ilk sütuna 1
a koyuyoruz 0
. Soldaki diğer tüm sütunlarda a ile yalnızca bir satır vardır 1
, bu nedenle 1
önceki sütundan taşınan tekrar toplanır 2
, bu da devam eder ... Bu işlem, en soldaki sütuna ulaşana kadar kendini tekrarlar. 1
taşınır Taşana ve kaybolur, böylece gidecek vardır ve biz kalacaksın edilecek 0
genelinde s tüm.
Bu sisteme 2'nin Tamamlayıcısı denir . Bununla ilgili daha fazla bilgiyi buradan edinebilirsiniz:
2 İmzalı Tam Sayılar için Tamamlayıcı Temsil .
Şimdi, 2'nin tamamlayıcısındaki çökme kursu bittiğine göre, -1
ikili temsili her yerde olan tek sayı olduğunu göreceksiniz 1
.
~
Bitsel NOT operatörünü kullanarak, belirli bir sayıdaki tüm bitler ters çevrilir. 0
Tüm bitleri tersine çevirmekten geri dönmenin tek yolu, her şeyden başlayıp başlamadığımızdır 1
.
Yani, bütün bu söyleyerek uzun soluklu bir yol olduğunu ~n
ancak dönecektir 0
eğer n
olduğunu -1
.
in
?