NOT lógico (!)

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

O operador lógico NOT (!) (complemento lógico, negação) leva a verdade à falsidade e a falsidade à verdade, por isso, é conhecido como um operador de "negação". Normalmente é usado com valores booleanos (lógicos). Quando usado com valores não booleanos, retorna false se seu único operando puder ser convertido em true; caso contrário, retorna true.

Experimente

const a = 3;
const b = -2;

console.log(!(a > 0 || b > 0));
// Expected output: false

Sintaxe

js
!x

Descrição

Retorna false se seu único operando puder ser convertido em true; caso contrário, retorna true.

Se um valor puder ser convertido em true, o valor será chamado truthy. Se um valor puder ser convertido em false, o valor será denominado falsy.

Exemplos de expressões que podem ser convertidas em falso são:

  • null;
  • NaN;
  • 0;
  • empty string ("" or '' or ``);
  • undefined.

Mesmo que o operador ! possa ser usado com operandos que não sejam valores booleanos, ele ainda pode ser considerado um operador booleano, pois seu valor de retorno sempre pode ser convertido em um primitivo booleano. Para converter explicitamente seu valor de retorno (ou qualquer expressão em geral) para o valor booleano correspondente, use um operador NOT duplo (!!) ou o construtor Boolean do JavaScript.

Exemplos

Usando NOT

O código a seguir mostra exemplos do operador lógico NOT !:

js
!true; // !t returns false
!false; // !f returns true
!""; // !f returns true
!"Cat"; // !t returns false

Duplo NOT (!!)

É possível usar alguns operadores NOT em série para forçar explicitamente a conversão de qualquer valor para um primitivo booleano correspondente. A conversão é baseada na "veracidade" ou "falsidade" do valor (veja truthy e falsy).

A mesma conversão pode ser feita através da função Boolean() do JavaScript.

js
!!true; // !!truthy returns true
!!{}; // !!truthy returns true: any object is truthy...
!!new Boolean(false); // ...even Boolean objects with a false .valueOf()!
!!false; // !!falsy returns false
!!""; // !!falsy returns false
!!Boolean(false); // !!falsy returns false

Conversão entre NOTs

A seguinte operação envolvendo booleanos:

js
!!bCondition

é sempre igual a:

js
bCondition

Especificações

Specification
ECMAScript® 2025 Language Specification
# sec-logical-not-operator

Compatibilidade com navegadores

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
Logical NOT (!)

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Veja também