Os operadores de comparação comparam os valores de dois operandos e avaliam se a
instrução que eles formam é 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 numérico 4 são iguais, esta expressão é avaliada como true:
2 + 2 === 4
> true
Coerção de tipo e igualdade
Dois dos operadores de comparação mais usados são == para igualdade aproximada
e === para igualdade estrita. == realiza uma comparação aproximada entre dois
valores, forçando os operandos a corresponder aos tipos de dados, se possível. Por
exemplo, 2 == "2" retorna true, mesmo que a comparação seja feita
entre um valor numérico e um valor de string.
2 == 2
> true
2 == "2"
> true
O mesmo acontece com !=, que retorna true apenas se os operandos que estão sendo
comparados não forem vagamente iguais.
2 != 3
> true
2 != "2"
> false
Comparações estritas usando === ou !== não realizam coerção de tipo. Para que uma
comparação estrita 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 "vagamente igual") | 2 == "2" | verdadeiro |
| != | Diferente | 2 != "3" | verdadeiro |
| > | Maior que | 3 > 2 | verdadeiro |
| >= | Maior que ou igual a | 2 >= 2 | verdadeiro |
| < | Menor que | 2 < 3 | verdadeiro |
| <= | Menor que ou igual a | 2 <= 3 | verdadeiro |
Verdadeiro e falso
Todos os valores no JavaScript são implicitamente true ou false e podem ser forçados para
o valor booleano correspondente. Por exemplo, usando o comparador "loosely equal". Um conjunto limitado de valores é forçado a false:
0nullundefinedNaN- Uma string vazia (
"")
Todos os outros valores são convertidos em 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 verdadeiro ou falso de um operando, avaliando true se o operando for false e false se o operando for true:
true
> true
!true
> false
!false
> true
Usar o operador lógico NOT (!) em outro tipo de dados, como um
número ou uma string, força esse valor a um booleano e inverte o valor verdadeiro ou
falso 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 corresponder ao valor booleano correspondente:
!!"string"
> true
!!0
> false
Os operadores lógicos AND e OR não realizam coerção por conta própria. Elas retornam o valor de um dos dois operandos que estão sendo avaliados, com o operando escolhido determinado por essa avaliação.
A operação lógica AND (&&) retorna o primeiro dos dois operandos somente se esse operando
for avaliado como false. Caso contrário, o segundo operando será retornado. Em comparações que
são avaliadas como valores booleanos, ele retorna true somente se os operandos em ambos os lados
do E lógico forem avaliados como true. Se qualquer lado for avaliado como false, ele retornará 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
inalterado se puder ser forçado para false. Se o primeiro operando puder ser forçado
a 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"
A operação OR lógica (||) retorna o primeiro dos dois operandos somente se esse operando
for avaliado como true. Caso contrário, o segundo operando será retornado. Em comparações que
são avaliadas como valores booleanos, isso significa que o método retorna true se um dos operandos
for avaliado como true. Se nenhum lado for avaliado como true, ele 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 ele puder ser forçado para true. Se o primeiro operando puder ser forçado
a 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 ele
tiver qualquer valor diferente de null ou undefined. Caso contrário, ele retorna
o segundo operando.
null ?? "My string"
> "My string"
undefined ?? "My string"
> "My string"
true ?? "My string";
> true
?? é semelhante a uma operação lógica OR, mas é mais rigoroso 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 somente quando o primeiro é estritamente igual a null ou undefined,
mesmo que possa ser forçado a 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 é um único sinal de igual (=), usado para
atribuir um valor a uma variável declarada.
Use operadores de atribuição lógica para atribuir condicionalmente um valor a uma variável com base no valor verdadeiro ou falso dela.
O operador de atribuição lógica E (&&=) avalia o segundo operando e
o atribui ao primeiro se o primeiro for avaliado como
true. Ou seja, "se o primeiro operando for verdadeiro, atribua o valor do
segundo operando:"
let myVariable = false;
myVariable &&= 2 + 2;
> false
myVariable = true;
myVariable &&= 2 + 2;
> 4
O valor verdadeiro ou falso do primeiro operando determina se uma atribuição
é 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 ser atribuído a um
valor:
let myVariable = 5;
myVariable > 2 &&= "My string"
> SyntaxError: Invalid left-hand side in assignment
O operador de atribuição lógica OR (||=) avalia o segundo operando e
o atribui ao primeiro se ele for false.
Ou seja, "se o primeiro operando for falso, atribua 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"?
======!=