Operadores Relacionais ECMAScript
- Página anterior Operadores aditivos
- Próxima página Operadores de igualdade
Os operadores de relação realizam operações de comparação. Cada operador de relação retorna um valor Booleano.
Método de comparação convencional
Os operadores de relação menor, maior, menor ou igual e maior ou igual executam operações de comparação de dois números, de maneira semelhante às operações de comparação aritmética.
Cada operador de relação retorna um valor Booleano:
var bResult1 = 2 > 1 // true var bResult2 = 2 < 1 // false
No entanto, o comportamento de aplicar operadores de relação a duas strings é diferente. Muitas pessoas acreditam que "menor" significa "antes na ordem alfabética" e "maior" significa "depois na ordem alfabética", mas isso não é verdade. Para strings, cada caractere de uma string é comparado numericamente com o caractere correspondente na string outra. Após concluir essa operação de comparação, é retornado um valor Booleano. O problema é que os códigos dos caracteres maiúsculos são menores que os códigos dos caracteres minúsculos, o que pode levar a situações como as seguintes:
var bResult = "Blue" < "alpha"; alert(bResult); // exibe true
No exemplo acima, a string "Blue" é menor que "alpha", porque o código do caractere B é 66 e o código do caractere a é 97. Para obter um resultado de comparação alfabética real, é necessário converter os dois números para a mesma forma de escrita (todo em maiúsculas ou todo em minúsculas) antes da comparação:
var bResult = "Blue".toLowerCase() < "alpha".toLowerCase(); alert(bResult); // output false
Converter os dois operandos para minúsculas garante que a identificação correta de "alpha" venha antes de "Blue" na ordem alfabética.
Comparar número e string
Outra situação complicada ocorre quando se compara dois números em formato de string, por exemplo:
var bResult = "25" < "3"; alert(bResult); // output "true"
O código acima compara a string "25" com "3". Os dois operandos são strings, então a comparação é feita com os códigos de caracteres (o código de caractere "2" é 50, e o código de caractere "3" é 51).
No entanto, se você substituir um operando por um número, o resultado será interessante:
var bResult = "25" < 3; alert(bResult); // output "false"
Aqui, a string "25" será convertida para o número 25 e comparada com o número 3, como esperado.
Sempre que comparar um número com uma string, o ECMAScript convertirá a string em um número e comparará conforme a ordem numérica.
No entanto, e se a string não puder ser convertida em um número? Considere o exemplo a seguir:
var bResult = "a" < 3; alert(bResult);
Você pode prever o que esse código vai outputar? A letra "a" não pode ser convertida em um número significativo. No entanto, se você chamar o método parseInt() nele, o retorno é NaN. Segundo as regras, qualquer operador de comparação que contenha NaN deve retornar false, então esse código também outputa false:
var bResult = "a" >= 3; alert(bResult);
Normalmente, se os dois valores de uma operação menor que retornam false, então a operação maior ou igual deve retornar true, mas se algum número for NaN, a situação não é a mesma.
- Página anterior Operadores aditivos
- Próxima página Operadores de igualdade