SORU
16 ŞUBAT 2012, PERŞEMBE


Ne !!~ (not tilde/bang bang tilde) '/içeren' Dizi yöntem dahil bir arama sonucunu değiştirmek mi?

Eğer bir WordPress kullanmak en açıklamaları okursanız inArray sayfa here, ilginç bir açıklama var:

!!~jQuery.inArray(elm, arr) 

Şimdi, çift ünlem türü için sonuç dönüştürür inanıyorum true değeri boolean,. Anlamadığım şey, bu tilde (~) operatörü kullanılır nedir?

var arr = ["one", "two", "three"];
if (jQuery.inArray("one", arr) > -1) { alert("Found"); }

if deyimi yeniden düzenleme:

if (!!~jQuery.inArray("one", arr)) { alert("Found"); }

Arıza:

jQuery.inArray("one", arr)     // 0
~jQuery.inArray("one", arr)    // -1 (why?)
!~jQuery.inArray("one", arr)   // false
!!~jQuery.inArray("one", arr)  // true

Ben de eğer ön tilde koydum, sonuç -2 olduğunu fark ettim.

~!!~jQuery.inArray("one", arr) // -2

Tilde amacını anlamadım. Biri bunu açıklamak ya da bir kaynak doğru beni işaret edebilir misiniz?

CEVAP
14 Mayıs 2012, PAZARTESİ


!!~expr döner expr aksi -1; true döner olduğunda 20**. Bu gibi çalışır:

   -1 = 1111 1111 1111 1111 1111 1111 1111 1111b
  ~-1 = 0000 0000 0000 0000 0000 0000 0000 0000b // ~ = bitwise not = invert all bits
   !0 = true
!true = false

Değeri -1 en az bir bit sıfıra ayarlanır; eviren truthy bir değer oluşturur; iki kez ! operatör truthy bir değere uygulamak daha başka getirileri boolean true.

-Yukarıda belirtilen işlevi, string ise true değerini döndürür/dizinin belirtilen iğne içerir:

!!~"abc".indexOf("d") // indexOf() returns -1, the expression evaluates to false
!!~"abc".indexOf("a") // indexOf() returns  0, the expression evaluates to true
!!~"abc".indexOf("b") // indexOf() returns  1, the expression evaluates to true

Ben şahsen bu zavallı kodlama ne kadar bu bir kod satırı deşifre geçirdiğini düşünüyor sanırım. Kolayca aşağıdaki gibi yazılı olabilir

return this.modifiedPaths.indexOf(path) != -1; // note: indexOf returns a number >= -1

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Caramella Girls

    Caramella Gi

    19 Mayıs 2008
  • MyCyberAcademy

    MyCyberAcade

    2 EKİM 2011
  • tychoadragmire

    tychoadragmi

    20 Mart 2006