Desigualdad
Los operadores <
, >
, <=
, y >=
son usados para la desigualdad, que hace referencia en la especificación como "comparación relacional". Usualmente seran usados con valores ordinales comparables como numeros
. Es sencillo de entender que 3 < 4
.
Sin embargo los valores string
de JS también pueden ser comparados con la desigualdad, utilizando las reglas del alfabéto ("bar" < "foo"
).
Que pasa con la coerción? Reglas similares a las de la comparación ==
(aunque no son exactamente iguales!) tambien se aplican a los operadores de desigualdad. En este caso, no hay operadores de "estricta desigualdad" que no permitiera la coerción de la misma manera que lo hace la ===
"igualdad estricta".
Considere:
var a = 41;
var b = "42";
var c = "43";
a < b; // true
b < c; // true
Que sucedio aqui? En la sección 11.8.5 de la especificación ES5, dice que si dos valores en la comparación <
son string
s, como lo es b < c
, se realiza una comparación lexicográfica (en orden alfabético como un diccionario). Pero si uno de los dos no es un string
como lo es a < b
, entonces ambos valores son coercionados a valores de tipo number
y asi una comparación numerica natural ocurre.
El problema mas grande que usted puede tener con las comparaciones entre distintos tipos de valores -- recuerde que no hay manera de usar "desigualdad-estricta" -- es cuando uno de los valores no puede ser convertido a un numero valido, como:
var a = 42;
var b = "foo";
a < b; // false
a > b; // false
a == b; // false
La comparación ==
falla por distintas razones. a == b
puede fallar si es interpretado ya sea como 42 == NaN
o "42" == "foo"
-- como se explico anteriormente, la comparacion es interpretada como la primera.
Nota: Para mas información acerca de las reglas de comparación de desigualdad, ver la sección 11.8.5 de la especificación ES5 y tambien consulte el capitulo 4 de Types & Grammar de esta serie de libros.