Si vous lisez les commentaires sur la inArray
page jQuery ici , il y a une déclaration intéressante:
!!~jQuery.inArray(elm, arr)
Maintenant, je crois qu'un point d'exclamation double convertira le résultat en type boolean
, avec la valeur de true
. Ce que je ne comprends pas, c'est à quoi sert l' ~
opérateur tilde ( ) dans tout cela?
var arr = ["one", "two", "three"];
if (jQuery.inArray("one", arr) > -1) { alert("Found"); }
Refactorisation de l' if
instruction:
if (!!~jQuery.inArray("one", arr)) { alert("Found"); }
Panne:
jQuery.inArray("one", arr) // 0
~jQuery.inArray("one", arr) // -1 (why?)
!~jQuery.inArray("one", arr) // false
!!~jQuery.inArray("one", arr) // true
J'ai aussi remarqué que si je mets le tilde devant, le résultat est -2
.
~!!~jQuery.inArray("one", arr) // -2
Je ne comprends pas le but du tilde ici. Quelqu'un peut-il l'expliquer ou me diriger vers une ressource?
~jQuery.inArray()
est en fait très utile - peut-être même une très bonne raison pour laquelle les fonctions de recherche retournent en -1
cas d'échec (la seule valeur dont le complément à deux est faux). Une fois que vous avez vu et compris le truc, je pense qu'il est encore plus lisible que != -1
.
!!~
pour quoi que ce soit .
if (x != -1)
et if (~x)
pour moi, c'est que le premier exprime réellement ce que vous avez l'intention de faire. Ce dernier exprime que vous voulez faire autre chose entièrement ("s'il vous plaît convertir mon nombre 64 bits en un entier 32 bits, et vérifier si au niveau du bit NON de cet entier est vrai"), où vous obtenez simplement le résultat souhaité dans ce un cas.