Se você leu os comentários na inArray
página jQuery aqui , há uma declaração interessante:
!!~jQuery.inArray(elm, arr)
Agora, acredito que um ponto de exclamação duplo converterá o resultado em tipo boolean
, com o valor de true
. O que eu não entendo é qual é o uso do ~
operador til ( ) em tudo isso?
var arr = ["one", "two", "three"];
if (jQuery.inArray("one", arr) > -1) { alert("Found"); }
Refatorando a if
declaração:
if (!!~jQuery.inArray("one", arr)) { alert("Found"); }
Demolir:
jQuery.inArray("one", arr) // 0
~jQuery.inArray("one", arr) // -1 (why?)
!~jQuery.inArray("one", arr) // false
!!~jQuery.inArray("one", arr) // true
Também notei que se eu colocar o til na frente, o resultado é -2
.
~!!~jQuery.inArray("one", arr) // -2
Não entendo o propósito do til aqui. Alguém pode me explicar ou indicar um recurso?
~jQuery.inArray()
é realmente muito útil - possivelmente até mesmo um bom motivo pelo qual as funções de pesquisa retornam -1
para falha (o único valor cujo complemento de dois é falso). Depois de ver e entender o truque, sinto que é ainda mais legível do que != -1
.
!!~
para nada .
if (x != -1)
e if (~x)
para mim é que o primeiro realmente expressa o que você pretende fazer. Este último expressa que você deseja fazer algo totalmente diferente ("por favor, converta meu número de 64 bits em um inteiro de 32 bits e verifique se o NÃO bit a bit desse inteiro é verdadeiro"), onde você obtém o resultado desejado neste Um caso.