¿Por qué 2 no es lo mismo que 3?

publicado en la categoría JavaScript
Entender una igualdad es sencillo siempre que estemos comparando cosas similares. Es bien sabido que no pueden compararse peras con manzanas pero en JavaScript eso es relativamente falso ya que en este lenguaje, cuando se comparan cosas, ambos operadores son convertidos para que sean del mismo tipo.

Es obvio que 2 y 3 no son lo mismo. Nadie puede decir que uno sea mejor que otro, sólo se puede afirmar que no son lo mismo y en JavaScript tampoco así que si existen comparaciones donde hay dos signos igual y otras donde hay tres no se trata de una redundancia o extravagancia sino que hay algún motivo ... lo sepamos o no.

Entender una igualdad es sencillo siempre que estemos comparando cosas similares. Es bien sabido que no pueden compararse peras con manzanas pero en JavaScript, eso es relativamente falso ya en este lenguaje, cuando se comparan cosas iguales (==) o desiguales (!=) ocurre algo previo: ambos operadores son convertidos para que sean del mismo tipo y recién luego se establece el resultado que será true (si es verdad) o false (si no lo es).

Seamos más concretos; por ejemplo:

var numero = 2; // esta variable es un número
var letra = "2"; // esta variable es un string
// comparamos ambos
numero==letra; devolverá true ¡SON IGUALES!
numero!=letra; devolverá false ¡SON IGUALES!

En general, esto es una forma de simplificarnos la vida pero, en determinados casos, puede generar errores ya que necesitamos evaluar algo de modo más estricto. Para eso es que existe la triple igualdad (===) o desigualdad (!==) que compara los valores sin convertirlos al mismo tipo y por lo tanto:

numero===letra; devolverá false ¡SON DISTINTOS!
numero!==letra; devolverá true ¡SON DISTINTOS!

Esto es lo que se llama comparación estricta donde ambos operandos deben tener el mismo valor y ser del mismo tipo.

Toda esta disquisición parte de una publicacion anterior donde se evaluaba el resultado que devolvía una función que podía ser un dato o el valor null si no se obtenían resultados.

Ya lo dije; normalmente, no hay una gran diferencia práctica entre ambos métodos pero todo se complica cuando necesitamos evaluar resultados como null o undefined.

undefined es una propiedad global que indica que una variable no ha sido definida, es decir, que no se le ha asignado ningún valor (no existe). Por el contrario, null es un valor de Javascript que representa un valor nulo o vacío.

En este caso, una comparación simple no nos serviría porque:

var a = undefined;
var b = null;
a==b; devolverá true ¡SON IGUALES!
// para estar seguros necesitamos ser estrictos
a===b; devolverá false ¡SON DISTINTOS!

Hay quienes llegan al extremo de calificar las comparaciones simples como diabólicas. En este mundo, donde todo es relativo, esa afirmación también lo es pero ... relativamente. Sin duda, usar las comparaciones estrictas evitan problemas pero, lo cierto es que si sabemos lo que estamos haciendo, ese demonio no existe y si no lo sabemos, la solución es probar, aprender y volver a probar.