Operadores de comparação: perguntando se algo é igual, maior ou menor

Aprenda a comparar valores e obter respostas de 'verdadeiro' ou 'falso'.

Imagine que você está organizando uma festa e precisa decidir quem pode entrar. Você faria perguntas como: "A idade é maior ou igual a 18?", "O nome está na lista de convidados?", "A pessoa está vestindo a fantasia certa?".

Em programação, os operadores de comparação servem para fazer exatamente esse tipo de pergunta. Eles comparam dois valores e sempre retornam uma resposta booleana: true (verdadeiro) ou false (falso). Essa resposta é crucial para o JavaScript decidir qual caminho seguir no seu código.

Os operadores de comparação em JavaScript:

Operador Nome Exemplo Retorna true se...
== Igual a (comparação frouxa) 5 == '5' Os valores são iguais, mesmo que os tipos sejam diferentes (tenta converter).
=== Estritamente igual a 5 === '5' Os valores são iguais E os tipos são iguais.
!= Diferente de (frouxa) 5 != '5' Os valores são diferentes (tenta converter).
!== Estritamente diferente de 5 !== '5' Os valores são diferentes OU os tipos são diferentes.
> Maior que 10 > 5 O valor da esquerda é maior que o da direita.
< Menor que 10 < 5 O valor da esquerda é menor que o da direita.
>= Maior ou igual a 10 >= 10 O valor da esquerda é maior ou igual ao da direita.
<= Menor ou igual a 10 <= 5 O valor da esquerda é menor ou igual ao da direita.

Exemplos práticos:

Vamos ver esses operadores em ação.

let idade = 25;
let idadeMinima = 18;
let nome = "Maria";
let outroNome = "joao";
let numeroTexto = "25";

// Operadores de Igualdade

// == (Igual a - comparação frouxa)
console.log("idade == 25:", idade == 25);         // Saída: true (25 é igual a 25)
console.log("idade == numeroTexto:", idade == numeroTexto); // Saída: true (25 é igual a "25" após conversão)

// === (Estritamente igual a - comparação estrita) - RECOMENDADO!
console.log("idade === 25:", idade === 25);       // Saída: true (25 é igual a 25 E ambos são Number)
console.log("idade === numeroTexto:", idade === numeroTexto); // Saída: false (25 é Number, "25" é String)

// != (Diferente de - comparação frouxa)
console.log("idade != 30:", idade != 30);         // Saída: true (25 é diferente de 30)
console.log("idade != numeroTexto:", idade != numeroTexto); // Saída: false (25 não é diferente de "25" após conversão)

// !== (Estritamente diferente de - comparação estrita) - RECOMENDADO!
console.log("idade !== 30:", idade !== 30);       // Saída: true (25 é diferente de 30 E ambos são Number)
console.log("idade !== numeroTexto:", idade !== numeroTexto); // Saída: true (25 é Number, "25" é String - tipos diferentes)

// Operadores de Ordem

// > (Maior que)
console.log("idade > idadeMinima:", idade > idadeMinima); // Saída: true (25 é maior que 18)

// < (Menor que)
console.log("idade < 20:", idade < 20);           // Saída: false (25 não é menor que 20)

// >= (Maior ou igual a)
console.log("idade >= idadeMinima:", idade >= idadeMinima); // Saída: true (25 é maior ou igual a 18)
console.log("idade >= 25:", idade >= 25);         // Saída: true (25 é maior ou igual a 25)

// <= (Menor ou igual a)
console.log("idade <= 20:", idade <= 20);         // Saída: false (25 não é menor ou igual a 20)
console.log("idade <= 25:", idade <= 25);         // Saída: true (25 é menor ou igual a 25)

A importância do === e !== (Comparação Estrita)

Esta é uma das dicas mais importantes para quem está começando em JavaScript: sempre que possível, use === e !==.

Por que? Porque == e != tentam "adivinhar" o que você quer comparar, convertendo os tipos de dados se eles forem diferentes. Isso pode levar a resultados inesperados e bugs difíceis de encontrar.

Exemplos de resultados "estranhos" com ==:

console.log(0 == false);    // Saída: true (JavaScript considera 0 como falso)
console.log('' == false);   // Saída: true (String vazia também é considerada falsa)
console.log(null == undefined); // Saída: true (Já vimos isso na lição anterior!)
console.log('1' == 1);      // Saída: true (String '1' é convertida para Number 1)

Com ===, esses resultados são muito mais lógicos e previsíveis:

console.log(0 === false);    // Saída: false (0 é Number, false é Boolean)
console.log('' === false);   // Saída: false ('' é String, false é Boolean)
console.log(null === undefined); // Saída: false (null é null, undefined é undefined - tipos diferentes)
console.log('1' === 1);      // Saída: false ('1' é String, 1 é Number)

Comparando Strings

Quando você compara strings com > ou <, o JavaScript usa a ordem alfabética (lexicográfica).

console.log("banana" > "maçã"); // Saída: false (b vem antes de m)
console.log("laranja" < "limão"); // Saída: true (r vem antes de m)
console.log("A" < "a"); // Saída: true (letras maiúsculas vêm antes das minúsculas na tabela ASCII/Unicode)

Os operadores de comparação são a espinha dorsal da lógica de decisão em seus programas. Com eles, você pode criar condições para que seu código reaja de diferentes maneiras, tornando-o dinâmico e inteligente.