Avatar ·

O que o operador !! (dupla exclamação) faz em JavaScript?

Olá, colegas! Sou novo em JavaScript e me deparei com um código estranho. Em um projeto, vi esta construção: ```javascript const isActive = !!someValue; ``` Eu entendo que `!` é o "NÃO" lógico (negação). Mas por que escrever dois pontos de exclamação seguidos? O que isso significa? Tentei remover um sinal — o código quebrou. Tentei remover os dois — também não funcionou como esperado. Li que `!!` é algum tipo de "operador", mas não o encontrei na documentação oficial. É algum truque? Ou é apenas um bug no código que todo mundo copia? Existe uma maneira mais clara de fazer a mesma coisa? Explique, por favor, em palavras simples, para que serve e por que é tão popular na comunidade JavaScript. De preferência com exemplos para entender como funciona com diferentes tipos de dados: strings, numbers, objects, null e undefined. Desde já, obrigado! <<>>

O que é !! (dupla negação) na verdade?

Na verdade, !! não é um operador separado. É apenas o operador lógico ! (NOT) usado duas vezes. O primeiro ! converte o valor para um boolean e o inverte. O segundo ! inverte novamente, retornando o valor boolean original correspondente ao valor truthy ou falsy.

Em outras palavras, !!value é uma forma concisa de escrever Boolean(value). Ele retorna true se o valor for truthy (como strings não vazias, números diferentes de zero, objetos) e false se for falsy (como 0, '', null, undefined, NaN, false).

Exemplos:

  • !!'hello' → true (string não vazia é truthy)
  • !!'' → false (string vazia é falsy)
  • !!42 → true (número diferente de zero é truthy)
  • !!0 → false (zero é falsy)
  • !!{} → true (objeto vazio é truthy)
  • !!null → false (null é falsy)
  • !!undefined → false (undefined é falsy)

É popular porque é uma maneira curta e explícita de garantir que um valor seja convertido para boolean, especialmente em condições ou ao atribuir valores booleanos. Alternativas mais legíveis incluem Boolean(value) ou uma condição explícita como value ? true : false.