validar - ¿Por qué “~ undefined” es-1 en JavaScript?
validar undefined jquery (3)
Al parecer, la representación de bits de undefined
es todos 0
s. Esto se puede ver si por lo siguiente: undefined | 0
undefined | 0
que se evalúa a 0
. Debido a esto, sabemos que la representación de bits undefined
es todo ceros.
Si ahora filtramos todos los bits (que es exactamente lo que ~
hace) obtenemos todos los 1
s, que es la representación de -1
.
Todo esto funciona debido a la cohesión tipo javascript.
Esta pregunta ya tiene una respuesta aquí:
- ¿Qué hace una tilde cuando precede a una expresión? 5 respuestas
Según este post , ejecute los siguientes códigos.
> ~function () { console.log(''foo'');}()
foo
-1
Como todos sabemos, el valor de retorno de la función anónima anterior undefined
está undefined
. ¿Por qué ~undefined
es -1
? No pude encontrar ninguna pregunta similar.
todo lo que no se puede representar en bits en JS, por ejemplo, "no definido, NaN" se trata como 0
o 0000000000000b
para el operador ~
, ya que convierte el operando en un entero con signo. Consulte la respuesta de @felixkling para obtener más detalles sobre esto y desde la operación ~
es BITwise no o 1s el complemento que invierte los bits, por lo que la declaración da como resultado una secuencia de 1
y cuando se trata de números a nivel binario, el MSB (bit más significativo) se trata como un sign
por lo que al convertir todos los 0s
en 1s
resulta en un valor decimal de -1
intento ~0
por ejemplo. y use este código para obtener la representación binaria de un número (-3 >>> 0).toString(2))
~
es bit a bit NO . Utiliza ToInt32
para convertir el argumento en un número. ToInt32
se define como:
- Deje que el número sea ToNumber (argumento).
- ReturnIfAbrupt (número).
- Si el número es NaN, +0, −0, + ∞ o −∞, devuelva +0.
...
A su vez, ToNumber(undefined)
devuelve NaN
, por lo que, según el paso 3, ToInt32
devuelve 0
.
Y ~0
es -1
.