Se leggi i commenti nella inArray
pagina jQuery qui , c'è una dichiarazione interessante:
!!~jQuery.inArray(elm, arr)
Ora, credo che un doppio punto esclamativo convertirà il risultato in tipo boolean
, con il valore di true
. Quello che non capisco è qual è l'uso dell'operatore tilde ( ~
) in tutto questo?
var arr = ["one", "two", "three"];
if (jQuery.inArray("one", arr) > -1) { alert("Found"); }
Refactoring della if
dichiarazione:
if (!!~jQuery.inArray("one", arr)) { alert("Found"); }
Abbattersi:
jQuery.inArray("one", arr) // 0
~jQuery.inArray("one", arr) // -1 (why?)
!~jQuery.inArray("one", arr) // false
!!~jQuery.inArray("one", arr) // true
Ho anche notato che se metto la tilde davanti, il risultato è -2
.
~!!~jQuery.inArray("one", arr) // -2
Non capisco lo scopo della tilde qui. Qualcuno può spiegarlo o indicarmi una risorsa?
~jQuery.inArray()
è in realtà molto utile - forse anche un'ottima ragione per cui le funzioni di ricerca restituiscono -1
un errore (l'unico valore il cui complemento a due è falso). Una volta che hai visto e capito il trucco, sento che è ancora più leggibile di != -1
.
!!~
per qualcosa .
if (x != -1)
e if (~x)
per me è che il primo esprime effettivamente ciò che intendi fare. Quest'ultimo esprime il tuo desiderio di fare qualcos'altro completamente ("converti il mio numero a 64 bit in un intero a 32 bit e controlla se bit per bit NON di quell'intero è vero"), dove ti capita di ottenere il risultato desiderato in questo un caso.