Costumo ver exemplos como este:
A cópia do código é a seguinte:
var a;
var b = !! a;
A é indefinido por padrão. ! a é verdadeiro: !! a é falso, então o valor de B é falso, não é mais indefinido, nem outros valores, que fornece principalmente conveniência para o julgamento subsequente.
!!
Como o JavaScript é um idioma do tipo fraco (as variáveis não possuem tipos de dados fixos), às vezes precisa ser lançado para o tipo correspondente, como:
A cópia do código é a seguinte:
a = parseint ("1234")
a = ”1234 ″ -0 // converter em número
b = 1234+”// converter para string
c = algumObject.toString () // Converta objeto em string
Entre eles, o primeiro e o quarto são conversões explícitas e 2 e 3 são conversões implícitas
Conversão booleana, regras de convenção JavaScript são
falso, indefinido, nulo, 0, "" é falso
Verdadeiro, 1, "Somestring", [objeto] é verdadeiro
Para outros valores implicitamente convertidos, como nulo e indefinido, o operador!
Vamos dar uma olhada novamente:
A cópia do código é a seguinte:
var foo;
alerta (! foo); // em caso indiferente, uma marca de exclamação retorna verdadeira;
Alerta (! Goo); // No caso de Null, o retorno de um ponto de exclamação também é verdadeiro;
var o = {sinalizador: true};
var teste = !! o.flag; // equivalente a var test = o.flag || false;
alerta (teste);
Este exemplo demonstra que, quando indiferente e nulo, o retorno de um ponto de exclamação é verdadeiro, e o retorno de dois pontos de exclamação é falso; portanto, a função dos dois pontos de exclamação é que, se o valor da variável for claramente definido (não NULL/UNDIFINEND/0/"e" valores equivalentes), o resultado será retornado com base no valor real da variável.