¡Hola! Me parece que andas usando un bloqueador de anuncios =( ¿Nos desbloqueas? ¿Por qué?
F13

Funcion 13

¿Por qué usar tres símbolos de igual para comparar en JavaScript?

Hoy daremos un paso más en la comprensión de JavaScript. Es un lenguaje que tiene muchas cosas malas, pero también muchas buenas. Ya hemos visto cosas como: funciones, prototype y alcance. No obstante, hoy voy a explicar el porqué debemos usar tres símbolos de igual, cuándo debemos usarlo y cuándo no.

Cuando comencé con el lenguaje, muchas veces leía esta especie de dogma sobre los tres símbolos de igual pero tardé un tiempo en entender correctamente los motivos.

Sin duda, la comparación de elementos es uno de los pilares básicos de cualquier aplicación. Sea en el lenguaje que sea. Muchas veces usaremos sentencias como:

if (a == b){ //Hagamos algo maravilloso } else // Mejor no hacemos nada  

O, si sois fieles seguidores del dogma de los tres símbolos, haréis algo así:

if (a === b){ //Hagamos algo maravilloso }  

La diferencia entre ambas sentencias de control, es que la segunda usa el operador de triple-igual, lo cual implica una igualdad estricta o idéntica.

Al principio es muy común usarlos por usar “buenas prácticas” en vez de los dos iguales, muchas veces sin comprender el porqué, ni cual es la diferencia.

Entiende las diferencias

En JavaScript, hacer una comparación con dos símbolos de igual (como es habitual en otros lenguajes), el resultado será evaluado como true si ambos valores son iguales. No obstante, debido a las características especiales del lenguaje, si los valores comparados son de distinto tipo, se hará una conversión de tipos.

Cada valor en un lenguaje de programación, es de un tipo. En JavaScript tenemos cadenas, numeros, booleanos, funciones y objetos. Si intentamos comparar por ejemplo true con un número, el navegador convertirá true a 1 y luego lo comparará. Si intentamos comparar una cadena con un número, el navegador igualmente, intentará convertir la cadena en un número.

Esto puede ser beneficioso a veces aunque otras no tanto:

0 == false // true -> El 0 es un valor "falso" en JavaScript  
null == false // false -> null también es un valor "falso" en JavaScript pero en este caso devuelve false  
1234 == '1234' // true -> JavaScript convierte la cadena a un número y... ¡voila! coincide  
' \n' == 0 // true ->  ¿?  
'  ' == 0 // true ->  ¿?  
undefined == null // true -> ¿?  

En vista del éxito obtenido, en la mayoría de los casos es recomendable usar el operador de tres iguales y no usar el de dos.

El triple operador no hace conversiones de tipos por lo que, usarlo nos evita varios problemas ya que los valores comparados deben ser iguales al 100%.

Revisando el ejemplo anterior obtendríamos:

0 === false // false  
null === false // false  
1234 === '1234' // false  
' \n' === 0 // false  
'  ' === 0 // false  
undefined === null // false  

¿Y qué hay de no-igual?

Cuando hacemos la comparación inversa, en la que comprobamos que son distintos, se aplican las mismas reglas. No obstante, en vez de usar tres signos de igual usaremos dos, de la siguiente forma !==.

Así pues, estas operaciones nos darían los resultados esperados:

0 !== false // true  
null !== false // true  
1234 !== '1234' // true  
' \n' !== 0 // true  
'  ' !== 0 // true  
undefined !== null // true  

Una lanza a favor

Ambos casos tienen sus usos y, si realmente sabes cómo usar JavaScript, usar ambos comparadores no debería ser ningún problema. Por ejemplo, usar el método indexOf siempre devolverá un entero por lo que no es necesario hacer la comparación exacta.

Por otro lado, algo muy importante es el hecho de que, al obtener datos de un formulario, estos siempre vendrán en forma de cadenas. Si obtenemos el valor de un campo de texto, un menú de selección o incluso un botón radio y luego lo comparamos de forma extricta con un número en nuestro código, tendremos un false como una casa.

Para evitar esto tenemos dos formas: usar el doble símbolo de comparación y forzar así una conversión de tipos, o convertir el valor usando la función parseInt de JavaScript.

Programador Front-end en First + Third y Potato. Trabajando con JavaScript y HTML5 desde el corazón de Sevilla.

Comentarios ¡Únete a la conversación!