Expressões Condicionais - JavaScript
Expressões condicionais operam com condições - expressões que retornam um valor do tipo Booleano - true
false
Operações de Comparação
Os operadores de comparação comparam dois valores e retornam verdadeiro ou falso:
==
O operador de igualdade compara dois valores, e se eles são iguais, retorna
, caso contrário, retornatrue
:false
x == 5
===
O operador de identidade também compara dois valores e seus tipos, e se ambos são iguais, retorna
, caso contrário, retornatrue
:false
x === 5
!=
Compara dois valores, e se eles não são iguais, retorna
, caso contrário, retornatrue
:false
x != 5
!==
Compara dois valores e seus tipos, e se eles não são iguais, retorna
, caso contrário, retornatrue
:false
x !== 5
>
Compara dois valores, e se o primeiro é maior que o segundo, retorna
, caso contrário, retornatrue
:false
x > 5
<
Compara dois valores, e se o primeiro é menor que o segundo, retorna
, caso contrário, retornatrue
:false
x < 5
>=
Compara dois valores, e se o primeiro é maior ou igual ao segundo, retorna
, caso contrário, retornatrue
:false
x >= 5
<=
Compara dois valores, e se o primeiro é menor ou igual ao segundo, retorna
caso contrário, retornatrue
:false
x < 5
Todos os operadores são bastante simples, talvez com exceção do operador de igualdade e do operador de identidade. Ambos comparam dois valores, mas o operador de identidade também leva em conta o tipo do valor. Por exemplo:
const income = 100;
const strIncome = "100";
const result = income == strIncome;
console.log(result); // true
Os operadores de desigualdade != e !== funcionam de maneira similar.
Operações Lógicas
As operações lógicas geralmente são aplicadas a valores do tipo Booleano - true
false
true
false
Lógico E (AND)
A operação &&
true
false
console.log(true && true); // true
console.log(true && false); // false
console.log(false && false); // false
Esse tipo de operação é comum quando é necessário verificar a verdade de duas condições, e ambas devem ser verdadeiras:
const money = 1000;
const age = 21;
// verifica se age é maior que 18 e money é maior que 100
const access1 = age > 18 && money > 100;
console.log(access1); // true
// verifica se age é maior que 18 e money é maior que 1000
const access2 = age > 18 && money > 1000;
console.log(access2); // false
Neste caso, a constante access1
access1
true
Por outro lado, a constante access2
access2
false
Lógico OU (OR)
A operação ||
true
true
false
console.log(true || true); // true
console.log(true || false); // true
console.log(false || false); // false
Esta operação é frequentemente usada para verificar duas condições, quando é suficiente que apenas uma das condições seja verdadeira, por exemplo:
const money = 1000;
const age = 21;
// verifica se age é maior que 18 ou money é maior que 1000
const access1 = age > 18 || money > 1000;
console.log(access1); // true
// verifica se age é maior que 22 ou money é maior que 1000
const access2 = age > 22 || money > 1000;
console.log(access2); // false
Neste caso, a constante access1
access1
No entanto, a constante access2
access2
Lógico NÃO (NOT)
A operação !
true
false
false
true
console.log(!true); // false
console.log(!false); // true
const isAlive = true;
const isDead = !isAlive;
console.log(isDead); // false
Operações Lógicas com Valores Arbitrários
Embora tenha sido mencionado que as operações lógicas geralmente envolvem operandos do tipo Booleano - true
false
Valor | Resultado |
---|---|
null | false |
undefined | false |
0 (também NaN) | false |
1 (qualquer valor que não seja zero) | true |
"" (string vazia) | false |
"texto" (string não vazia) | true |
{} (qualquer objeto) | true |
Quando alguns operandos não representam um valor Booleano, as operações lógicas no JavaScript operam de acordo com certas regras específicas, aproveitando a coerção de tipos.
Operação E Lógico (&&) com Valores Não-Booleanos
Se pelo menos um dos operandos da operação &&
Se o primeiro operando é avaliado como false (por exemplo, número 0, uma string vazia, null, undefined), então o operador retorna o primeiro operando.
Nos demais casos, retorna o segundo operando.
Exemplos:
let isAlive; // undefined
let name = "Tom";
const result = isAlive && name;
console.log(result); // undefined
console.log(false && "Tom"); // false
console.log("Tom" && null); // null
console.log(true && "Tom"); // Tom
No exemplo const result = isAlive && name;
isAlive
false
undefined
Operação OU Lógico (||) com Valores Não-Booleanos
Quando um ou ambos os operandos da operação ||
Se o primeiro operando é avaliado como
(ou seja, não étrue
, string vazia,0
ounull
), então retorna o primeiro operando.undefined
Em todos os outros casos, retorna o segundo operando.
Exemplos:
console.log(false || "Tom"); // Tom
console.log("Tom" || null); // Tom
console.log(true || "Tom"); // true
Operação de Negação (!) com Valores Não-Booleanos
Quando o operando da operação de negação !
Se o operando é uma string vazia, retorna
; se a string não está vazia, retornatrue
.false
Se o operando é o número 0, retorna
; para todos os outros números, retornatrue
.false
Se o operando é um objeto, retorna
.false
Se o operando é um dos valores
,null
, ouNaN
, retornaundefined
true
Exemplos:
let isAlive; // undefined
console.log(!isAlive); // true
console.log(!null); // true
console.log(!0); // true
console.log(!10); // false
console.log(!""); // true (string vazia)
console.log(!"Tom"); // false
Estruturas Condicionais
As operações lógicas podem aceitar valores de tipos arbitrários, não apenas Booleanos. Isso pode parecer desnecessário à primeira vista, mas tais construções podem ser extremamente úteis quando precisamos verificar uma condição e, dependendo dessa verificação, executar uma ação específica. Por exemplo:
const age = 22;
age <= 17 && console.log("Você tem menos de 18 anos. Acesso negado.");
age > 17 && console.log("Você tem mais de 17 anos. Acesso permitido.");
Neste caso, dependendo do valor da constante age (que representa a idade condicional), uma mensagem diferente é exibida na console (condicionalmente permitindo ou negando acesso). Lembrando que &&
&&
age <= 17 && console.log("Você tem menos de 18 anos. Acesso negado.");
Aqui, o primeiro operando, a expressão age <= 17
console.log()
De forma semelhante, a segunda operação &&
age > 17
age > 17 && console.log("Você tem mais de 17 anos. Acesso permitido.");
Aqui, a condição do primeiro operando é verdadeira, portanto, o segundo operando é executado, e a mensagem é exibida no console:
Você tem mais de 17 anos. Acesso permitido.
Para construções condicionais, também podemos usar a operação ||
false
&&
||
||
const age = 12;
age <= 17 || console.log("Você tem mais de 17 anos. Acesso permitido.");
age > 17 || console.log("Você tem menos de 18 anos. Acesso negado.");
Operações de Atribuição
No JavaScript, também existem várias operações que combinam operações lógicas com atribuição:
&&=
Semelhante à execuçãoa &&= b
:a = a && b
let x = true; let y = false; y &&= x; console.log(y); // false let c = false; let d = true; c &&= d; console.log(c); // false let a = true; let b = true; a &&= b; console.log(a); // true let e = false; let f = false; e &&= f; console.log(e); // false
||=
é equivalente à expressãoa ||= b
:a = a || b
let x = true; let y = false; y ||= x; console.log(y); // true let a = true; let b = true; a ||= b; console.log(a); // true let c = false; let d = true; c ||= d; console.log(c); // true let e = false; let f = false; e ||= f; console.log(e); // false