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 .