Operadores lógicos no JavaScript

Introdução ao JavaScript / Tutorial JavaScript

Os operadores lógicos no JavaScript são usados para realizar operações lógicas em valores booleanos (true ou false). Eles são amplamente utilizados em estruturas condicionais e expressões para controlar o fluxo do programa.

OperadorNomeDescrição
&&E (AND)Retorna true se ambas as expressões forem verdadeiras. Caso contrário, retorna false.
||OU (OR)Retorna true se pelo menos uma das expressões for verdadeira. Caso contrário, retorna false.
!NÃO (NOT)Inverte o valor lógico da expressão. Retorna true se a expressão for falsa, e false se for verdadeira.

Operador lógico && (AND)

O operador && retorna true se ambos os operandos forem true. Caso contrário, retorna false.

const a = true
const b = false

console.log(a && b) // false
console.log(a && true) // true

Operador lógico || (OR)

O operador || retorna true se pelo menos um dos operandos for true. Retorna false apenas se ambos forem false.

const a = true
const b = false

console.log(a || b) // true
console.log(b || false) // false

Operador lógico ! (NOT)

O operador ! inverte o valor lógico de um operando. Se o valor for true, ele retorna false, e vice-versa.

const a = true

console.log(!a) // false
console.log(!false) // true

Valor padrão com ||

O operador || pode ser usado para definir um valor padrão para uma variável. Ele avalia os operandos da esquerda para a direita e retorna o primeiro valor que for considerado "verdadeiro". Se todos os valores forem "falsos", ele retorna o último valor.

Exemplo básico

Se uma variável não tiver um valor válido, você pode usar || para atribuir um valor padrão:

let x
let y = x || 1000

console.log(y) // 1000

Neste exemplo, como x é undefined (falsy), o operador || retorna o valor à direita, que é 1000.

No JavaScript, os seguintes valores são considerados "falsos" (falsy): undefined, null, false, 0, NaN ou '' (uma string vazia).

Outro exemplo:

let nomeUsuario = ''

// Define "Convidado" como valor padrão se nomeUsuario estiver vazio
const nomeExibicao = nomeUsuario || 'Convidado'

console.log(`Bem-vindo, ${nomeExibicao}!`)

Saída:

 Bem-vindo, Convidado!

Precedência dos operadores lógicos

A precedência determina a ordem em que os operadores são avaliados em uma expressão. Operadores com maior precedência são avaliados antes dos operadores com menor precedência. Isso é especialmente importante em expressões complexas, onde a ordem de avaliação pode alterar o resultado final.

No caso dos operadores lógicos, a ordem de precedência é a seguinte:

  1. ! (NOT)
  2. && (AND)
  3. || (OR)

Você pode usar parênteses para alterar a ordem de avaliação e garantir que a expressão seja avaliada da forma desejada.

const a = true
const b = false
const c = true

console.log(a || b && c)   // true (b && c é avaliado primeiro)
console.log((a || b) && c) // true (a || b é avaliado primeiro)

Exemplos práticos

Verificando múltiplas condições

Você pode combinar operadores lógicos para verificar se duas condições são verdadeiras:

const usuario = "admin"
const senha = "1234"

// Verifica se o usuário e a senha estão corretos
const loginValido = usuario === "admin" && senha === "1234"

console.log(loginValido) // true

Configurando valores padrão

O operador || pode ser usado para atribuir um valor padrão a uma variável:

let nomeUsuario = ""

// Define "Convidado" como valor padrão se nomeUsuario estiver vazio
const nomeExibicao = nomeUsuario || "Convidado"

console.log(nomeExibicao) // "Convidado"

Negando uma condição

O operador ! pode ser usado para inverter o valor lógico de uma expressão:

const estaLogado = false

// Inverte o valor de estaLogado
const precisaFazerLogin = !estaLogado

console.log(precisaFazerLogin) // true

Validando intervalos

Você pode combinar operadores lógicos para validar intervalos de valores:

const idade = 25

if (idade >= 18 && idade <= 65) {
  console.log("Você está na faixa etária permitida.")
} 
else {
  console.log("Fora da faixa etária permitida.")
}

Os operadores lógicos são ferramentas poderosas para criar condições complexas e controlar o fluxo do seu programa de forma eficiente.