Wenn Sie die Kommentare auf der jQuery- inArraySeite hier lesen , gibt es eine interessante Erklärung:
!!~jQuery.inArray(elm, arr)
Ich glaube, ein doppeltes Ausrufezeichen konvertiert das Ergebnis in einen Typ booleanmit dem Wert von true. Was ich nicht verstehe, ist die Verwendung des ~Operators tilde ( ) in all dem?
var arr = ["one", "two", "three"];
if (jQuery.inArray("one", arr) > -1) { alert("Found"); }
Überarbeitung der ifAnweisung:
if (!!~jQuery.inArray("one", arr)) { alert("Found"); }
Nervenzusammenbruch:
jQuery.inArray("one", arr) // 0
~jQuery.inArray("one", arr) // -1 (why?)
!~jQuery.inArray("one", arr) // false
!!~jQuery.inArray("one", arr) // true
Mir ist auch aufgefallen, dass das Ergebnis ist, wenn ich die Tilde nach vorne lege -2 .
~!!~jQuery.inArray("one", arr) // -2
Ich verstehe den Zweck der Tilde hier nicht. Kann es bitte jemand erklären oder mich auf eine Ressource hinweisen?
~jQuery.inArray()ist tatsächlich sehr nützlich - möglicherweise sogar ein sehr guter Grund, warum die Suchfunktionen -1wegen eines Fehlers zurückkehren (der einzige Wert, dessen Zweierkomplement falsch ist). Sobald Sie den Trick gesehen und verstanden haben, ist er meiner Meinung nach noch besser lesbar als != -1.
!!~für irgendetwas verteidigen .
if (x != -1)und if (~x)für mich besteht darin, dass Ersteres tatsächlich ausdrückt, was Sie vorhaben. Letzteres drückt aus, dass Sie etwas ganz anderes tun möchten ("Bitte konvertieren Sie meine 64-Bit-Zahl in eine 32-Bit-Ganzzahl und prüfen Sie, ob das bitweise NICHT dieser Ganzzahl wahr ist"), wobei Sie zufällig das gewünschte Ergebnis erzielen ein Fall.