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 strings, 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.

results matching ""

    No results matching ""