variable validar error javascript undefined

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í:

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:

  1. Deje que el número sea ToNumber (argumento).
  2. ReturnIfAbrupt (número).
  3. 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 .