Wenn Sie die Kommentare auf der jQuery- inArray
Seite hier lesen , gibt es eine interessante Erklärung:
!!~jQuery.inArray(elm, arr)
Ich glaube, ein doppeltes Ausrufezeichen konvertiert das Ergebnis in einen Typ boolean
mit 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 if
Anweisung:
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 -1
wegen 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.