!! É geralmente usado para lançar a seguinte expressão em dados booleanos (booleanos), ou seja, só pode ser verdadeiro ou falso;
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.
!! É geralmente usado para lançar a seguinte expressão em dados booleanos (booleanos), ou seja, só pode ser verdadeiro ou falso;
Como o JavaScript é um idioma do tipo fraco (as variáveis não possuem tipos de dados fixos), às vezes precisa ser fundido para o tipo correspondente, como:
a = parseint ("1234") a = "1234" -0 // converter para o número b = 1234+"// converter para string c = algumbject.toString () // converte o objeto para string para stringEntre eles, o primeiro e o quarto são conversões explícitas, e os 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! O operador produzirá resultados verdadeiros, portanto, o objetivo de usar duas marcas de exclamação é converter esses valores em valores booleanos "equivalentes";
Vamos dar uma olhada novamente:
var foo; alerta (! foo); // indiferença, um ponto de exclamação retorna verdadeiro; alerta (! goo); // em null, um ponto de exclamação retorna 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-nulo/indiferente/0/"e" valores equivalentes), o resultado será retornado com base no valor real da variável. Se não estiver definido, o resultado será retornado.