Em JavaScript, números podem ser comparados usando os seguintes operadores relacionais e de igualdade.
| Comparação | Operador |
|---|---|
| Maior que | a > b |
| Maior ou igual a | a >= b |
| Menor que | a < b |
| Menor ou igual a | a <= b |
| (Estritamente) igual a | a === b |
| (Estritamente) diferente de | a !== b |
O resultado da comparação é sempre um valor Boolean, ou seja, true ou false.
1 < 3;
// => true
2 !== 2;
// => false
1 === 1.0;
// => true
// All numbers are floating-points, so this is different syntax
// for the exact same value.
Em JavaScript, os operadores de comparação acima também podem ser usados para comparar strings. Nesse caso, aplica-se uma ordem lexicográfica (de dicionário). Você encontra uma lista com a ordem exata de todos os caracteres aqui.
'Apple' > 'Pear';
// => false
'a' < 'above';
// => true
'a' === 'A';
// => false
Você precisa tomar cuidado ao comparar duas variáveis que parecem conter valores numéricos, mas são do tipo string.
Por causa da ordem lexicográfica, o resultado não será o mesmo de comparar valores do tipo Number.
10 < 2;
// => false
'10' < '2';
// => true (because "1" comes before "2")
Outra forma de comparar strings é o método localeCompare. Ele permite definir várias opções para ajustar a maneira como as strings são comparadas.
Talvez você se pergunte por que são três sinais de igual para verificar igualdade em JavaScript.
O === representa a verificação de igualdade estrita, o que significa que nenhuma conversão de tipo é feita e valores de tipos diferentes são sempre diferentes.
'3' === 3;
// => false
// The value on the left has type string, the value on the right
// has type number.
1 === 1n;
// => false
// The value on the left has type number, the value on the right
// has type bigint.
Usar === e !== é a forma recomendada de verificar igualdade em JavaScript.
Existem também == e !=, que representam a verificação de igualdade não estrita.
Você deve evitá-los, porque eles aplicam conversão implícita de tipo antes de fazer a comparação.
Os resultados nesses casos são difíceis de prever e, às vezes, não são o que você espera.
Você pode ler mais sobre isso aqui.
0 == false;
// => true
Em teoria, você também pode comparar valores de tipos diferentes (por exemplo, "1" < 2).
Nesse caso, os valores são convertidos implicitamente para determinar se o resultado é verdadeiro ou falso.
Assim como verificar igualdade não estrita, isso também não é recomendado, pelo mesmo motivo mencionado acima.
E o que fazer no lugar disso? Você pode aplicar conversão explícita de tipos. Com isso, você garante que os valores tenham o tipo correto antes de fazer a comparação. Assim, seu código fica mais fácil de entender e menos propenso a erros.