A menudo veo ejemplos como este:
La copia del código es la siguiente:
var a;
var b = !! a;
A está indefinido por defecto. !a is true, !!a is false, so the value of b is false, no longer undefined, nor other values, which mainly provides convenience for subsequent judgment.
!
Debido a que JavaScript es un lenguaje de tipo débil (las variables no tienen tipos de datos fijos), a veces se debe lanzar al tipo correspondiente, como:
La copia del código es la siguiente:
a = parseint ("1234")
a = ”1234 ″ -0 // Convertir al número
b = 1234+”// Convertir a cadena
c = someObject.ToString () // Convertir el objeto en cadena
Entre ellos, el primero y el cuarto son conversiones explícitas, y 2 y 3 son conversiones implícitas
Conversión booleana, las reglas de la convención de JavaScript son
falso, indefinido, nulo, 0, "" es falso
verdadero, 1, "somestring", [objeto] es verdadero
Para otros valores implícitamente convertidos como nulos y indefinidos, el operador producirá resultados verdaderos, por lo que el uso de dos marcos de exclamación es convertir estos valores en valores booleanos "equivalentes";
Vamos a echar un vistazo de nuevo:
La copia del código es la siguiente:
var foo;
alerta (! Foo); // En caso no, una marca de exclamación devuelve verdadero;
alerta (! Goo); // En caso de NULL, el retorno de una marca de exclamación también es verdadero;
var o = {bandera: true};
Var test = !! O.Flag; // equivalente a var test = o.flag || false;
alerta (prueba);
Este ejemplo demuestra que cuando no se realiza y nulo, el retorno de un punto de exclamación es verdadero, y el retorno de dos puntos de exclamación es falso, por lo que la función de los dos puntos de exclamación es que si el valor de la variable está claramente establecido (no se establece (no NULL/UNTIFINED/0/"y" Valores equivalentes), el resultado se devolverá en función del valor real de la variable.