Operadores de comparação

Eles comparam os valores de dois operandos e avaliam se a instrução deles é true ou false. O exemplo a seguir usa o operador strict equality (===) para comparar dois operandos: a expressão 2 + 2 e o valor 4. Como o resultado da expressão e o valor de número 4 são os mesmos, essa expressão é avaliada como true:

2 + 2 === 4
> true

Coerção e igualdade de tipo

Dois dos operadores de comparação mais usados são == para igualdade livre e === para igualdade estrita. == executa uma comparação flexível entre dois valores forçando os operandos a tipos de dados correspondentes, se possível. Por exemplo, 2 == "2" retorna true, mesmo que a comparação esteja sendo feita entre um valor numérico e um valor de string.

2 == 2
> true

2 == "2"
> true

O mesmo vale para !=, que retorna true somente se os operandos que estão sendo comparados não são vagamente iguais.

2 != 3
> true

2 != "2"
> false

Comparações estritas usando === ou !== não executam coerção de tipo. Para que uma comparação seja avaliada como true, os valores comparados precisam ter o mesmo tipo de dados. Por isso, 2 == "2" retorna true, mas 2 === "2" retorna false:

2 === 3
> false

2 === "2"
> false

Para remover qualquer ambiguidade que possa resultar da coerção automática, use === sempre que possível.

Operador Descrição Uso Resultado
=== Estritamente igual 2 === 2 verdadeiro
!== Não estritamente igual 2 !== "2" verdadeiro
== Igual (ou "parcialmente igual") 2 == "2" verdadeiro
!= Diferente 2 != "3" verdadeiro
> Maior que 3 > 2 verdadeiro
>= Maior ou igual a 2 >= 2 verdadeiro
< Menor que 2 < 3 verdadeiro
<= Menor ou igual a 2 <= 3 verdadeiro

Verdade e falsy

Todos os valores em JavaScript são implicitamente true ou false e podem ser convertidos para o valor booleano correspondente, por exemplo, usando o comparador "parcialmente igual". Um conjunto limitado de valores é convertido para false:

  • 0
  • null
  • undefined
  • NaN
  • Uma string vazia ("")

Todos os outros valores são convertidos para true, incluindo qualquer string que contenha um ou mais caracteres e todos os números diferentes de zero. Eles são comumente chamados de valores "verdadeiros" e "falsos".

"My string" == true
> true

100 == true
> true

0 == true
> false

Operadores lógicos

Use os operadores lógicos AND (&&), OR (||) e NOT (!) para controlar o fluxo de um script com base na avaliação de duas ou mais instruções condicionais:


2 === 3 || 5 === 5;
> true

2 === 2 && 2 === "2"
> false

2 === 2 && !"My string."
> false

Uma expressão lógica NOT (!) nega o valor true ou false de um operando, avaliando como true se o operando for avaliado como false e false se o operando for avaliado como true:


true
> true

!true
> false

!false
> true

O uso do operador lógico NOT (!) na frente de outro tipo de dados, como um número ou uma string, força esse valor para um booleano e inverte o valor true ou false do resultado.

"string"
> "string"

!"string"
> false

0
> 0

!0
> true

É uma prática comum usar dois operadores NOT para forçar rapidamente os dados a seu valor booleano correspondente:

!!"string"
> true

!!0
> false

Os operadores lógicos AND e OR não realizam nenhuma coerção sozinhos. Eles retornam o valor de um dos dois operandos que estão sendo avaliados, com o operando escolhido determinado por essa avaliação.

AND lógico (&&) retorna o primeiro dos dois operandos somente se ele for avaliado como false. Caso contrário, o segundo operando será retornado. Em comparações que são avaliadas como valores booleanos, ele retornará true somente se os operandos em ambos os lados da lógica AND forem avaliados como true. Se qualquer um dos lados for avaliado como false, ele retorna false.

true && false
> false

false && true
> false

false && false
> false

true && true
> true

Quando && é usado com dois operandos não booleanos, o primeiro operando é retornado sem alteração se puder ser forçado para false. Se o primeiro operando puder ser forçado para true, o segundo operando será retornado inalterado:

false && "My string"
> false

null && "My string"
> null

"My string" && false
> false

"My string" && "My second string"
> "My second string"

2 === 2 && "My string"
> "My string"

O OR lógico (||) retorna o primeiro dos dois operandos somente se ele for avaliado como true. Caso contrário, o segundo operando será retornado. Em comparações que avaliam como valores booleanos, isso significa que ele retorna true se um dos operandos for avaliado como true e, se nenhum dos lados for avaliado como true, retornará false:

true || false
> true

false || true
> true

true || true
> true

false || false
> false

Ao usar || com dois operandos não booleanos, ele retorna o primeiro operando inalterado se puder ser forçado para true. Se o primeiro operando puder ser forçado para false, o segundo operando será retornado inalterado:

false || "My string"
> "My string"

null || "My string"
> "My string"

"My string" || false
> "My string"

"My string" || "My second string"
> "My string"

2 === 2 || "My string"
> true

Operador de coalescência nulo

Introduzido no ES2020, o "operador de coalescência nulo" (??) retorna o primeiro operando somente se esse operando tiver qualquer valor diferente de null ou undefined. Caso contrário, ela retorna o segundo operando.

null ?? "My string"
> "My string"

undefined ?? "My string"
> "My string"

true ?? "My string";
> true

?? é semelhante a um OR lógico, mas é mais rígido na forma como o primeiro operando é avaliado. || retorna o segundo operando para qualquer expressão que possa ser forçada para false, incluindo undefined e null. ?? retorna o segundo operando quando o primeiro é qualquer coisa, menos null ou undefined, mesmo que ele possa ser forçado para false:

0 ?? "My string";
> 0

false ?? "My string";
> false

undefined ?? "My string";
> "My string"

Operadores de atribuição lógica

Use operadores de atribuição para atribuir o valor de um segundo operador a um primeiro operador. O exemplo mais comum é o sinal de igual (=), usado para atribuir um valor a uma variável declarada.

Use operadores lógicos de atribuição para atribuir condicionalmente um valor a uma variável com base no valor true ou false dessa variável.

O operador lógico de atribuição AND (&&=) avalia o segundo operando e atribui ao primeiro operando se somente se o primeiro operando avaliar como true. De fato, "se o primeiro operando for verdadeiro, atribua a ele o valor do segundo operando:"

let myVariable = false;
myVariable &&= 2 + 2;
> false

myVariable = true;
myVariable &&= 2 + 2;
> 4

O valor true ou false do primeiro operando determina se uma atribuição será realizada. No entanto, tentar avaliar o primeiro operando usando um operador de comparação resulta em um booleano true ou false, que não pode receber um valor:

let myVariable = 5;
myVariable > 2 &&= "My string"
> SyntaxError: Invalid left-hand side in assignment

O operador lógico de atribuição OR (||=) avalia o segundo operando e atribui ao primeiro operando se o primeiro operando for avaliado como false, efetivamente "se o primeiro operando for falso, atribua a ele o valor do segundo operando:"

let myVariable = false;
myVariable ||= 2 + 2;
> 4

myVariable = true;
myVariable ||= 2 + 2;
> true

Teste seu conhecimento

Qual operador indica "estritamente igual"?

===
==
=
!=