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#includesyöntem yoksa, bu çoklu dolguyu kullanabilirsiniz .
~Yaklaşık işareti kısayolunun kısa açıklaması :
Güncelleme: Şimdi includesyö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 indexOfolduğ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, 0sadece -1.
~Kısayolu kullanmayı seviyorum , çünkü dönüş değeri üzerinde bir karşılaştırma yapmaktan daha özlü. Ben JavaScript in_arraydoğ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 -1için +1:
00000000000000000000000000000001 +1
+ 11111111111111111111111111111111 -1
-------------------------------------------
= 00000000000000000000000000000000 0
Ve burada eklersiniz nasıl -15iç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 0s olmayan en sağdaki sütunda her zaman iki 1s olacaktır 2; İki varlığın ikili gösterimi , sonraki sütuna 10taşıyoruz ve sonuç için ilk sütuna 1a 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. 1taşınır Taşana ve kaybolur, böylece gidecek vardır ve biz kalacaksın edilecek 0genelinde 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, -1ikili 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. 0Tü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 ~nancak dönecektir 0eğer nolduğunu -1.
in?