Em javascript toda variável tem um valor booleano (verdadeiro ou falso), atribuído a ela. Por exemplo: um valor null tem o false vinculado, já uma string ou number é true.
O simbolo de exclamação "!" representa uma negação, ou seja é o operador lógico de não. Quando inserido antes de uma variável ele inverte o valor booleano retornando o oposto, quando é verdadeiro, retorna falso e quando é falso fica verdadeiro.
Então a exclamação determina qual o valor booleano da variável e retorna o inverso dela.
A exclamação dupla inverte o valor novamente retornando a informação inicial da variável.
Observação
A exclamação dupla "!!" não é um operador lógico diferente, apenas a "!" usada duas vezes.
Onde isso será usado?
Para saber qual o valor booleano associado a qualquer valor fornecido.
Outra forma de fazer seria usando a função construtora boolean(variável) que daria o mesmo resultado.
Para testar isso que foi dito basta digitar no console do navegador:
var teste = 3
console.log(teste)
//isso irá retornar 3;
Agora digite:
console.log(!teste)
//irá retornar false;
console.log(!!teste)
//retornará true;
console.log(Boolean(teste))
//retornará true;
console.log((2 == 1))
//é false;
console.log(!(2 == 1))
//é true;
console.log(!!(2 == 1))
//é false;
Veja mais em:
Quais os operadores lógicos em javascript?
O que são tipos primitivos de dados?
O que é operador ternário?
O que são operadores de atribuição?
O que são operadores aritméticos?
O que são operadores bit a bit?
O que são operadores de string?
O que são operadores unário?
O que são operadores relacionais?
O que são operadores lógicos?
O que são operadores de comparação?
O que significa => No JavaScript?
O que significa && no JavaScript?
Quais são os operadores aritméticos em JavaScript?
Qual é o operador lógico unário?
O que é uma Arrow function JavaScript?
O que é =>?
Quando usar try catch JavaScript?
Quais são os operadores relacionais?
O que a função console Log faz em JavaScript?
Como usar o IF em JavaScript?
O que significa o operador em JavaScript?
Para que serve o operador ++?
Quais são os operadores lógicos Portugol?
Quais são os operadores lógicos no Excel?
Como usar Arrow function JavaScript?
Como chamar uma Arrow function JavaScript?
Qual a diferença entre function e Arrow function?
Qual é a finalidade do tratamento de erro de um exemplo em JavaScript?
Como lançar exceção JavaScript?
Para que servem os operadores relacionais?
O que são operadores relacionais em C?
Qual símbolo representa o operador relacional diferente em SQL?
Como ver o console log?
Como usar o console Log JavaScript?
Qual a diferença entre console log e console INFO?
O que é condição em JavaScript?