Si lee los comentarios en la inArray
página de jQuery aquí , hay una declaración interesante:
!!~jQuery.inArray(elm, arr)
Ahora, creo que un signo de exclamación doble convertirá el resultado a tipo boolean
, con el valor de true
. Lo que no entiendo es cuál es el uso del ~
operador tilde ( ) en todo esto.
var arr = ["one", "two", "three"];
if (jQuery.inArray("one", arr) > -1) { alert("Found"); }
Refactorizando la if
declaración:
if (!!~jQuery.inArray("one", arr)) { alert("Found"); }
Descompostura:
jQuery.inArray("one", arr) // 0
~jQuery.inArray("one", arr) // -1 (why?)
!~jQuery.inArray("one", arr) // false
!!~jQuery.inArray("one", arr) // true
También noté que si pongo la tilde al frente, el resultado es -2
.
~!!~jQuery.inArray("one", arr) // -2
No entiendo el propósito de la tilde aquí. ¿Alguien puede explicarlo o señalarme un recurso?
~jQuery.inArray()
es realmente muy útil, posiblemente incluso una muy buena razón por la cual las funciones de búsqueda regresan -1
por falla (el único valor cuyo complemento a dos es falso). Una vez que haya visto y entendido el truco, creo que es aún más legible que != -1
.
!!~
por nada .
if (x != -1)
y if (~x)
para mí es que el primero en realidad expresa lo que pretendes hacer. Este último expresa que desea hacer algo completamente diferente ("convierta mi número de 64 bits en un entero de 32 bits, y verifique si el bit a bit NO de ese entero es verdadero"), donde simplemente obtiene el resultado deseado en este Un caso.