DEV Community

Cristian Fernando
Cristian Fernando

Posted on Edited on

Paracetamol.js💊| #4: Explica este código JavaScript

¿Puedes explicar este código?

console.log(false == 0) // true
console.log(false === 0) // false
Enter fullscreen mode Exit fullscreen mode

¿Por qué false == 0 es true y false === 0 es false?


Explicación en el primer comentario.

Top comments (5)

Collapse
 
duxtech profile image
Cristian Fernando • • Edited

JavaScript tiene una peculiaridad que se denomina coerción de tipos. Al intentar realizar algún tipo de operación o comparación ambigua el lenguaje tratará de realizar una conversión de tipos implícita para poder devolver un resultado más o menos lógico, el problema acá radica en que muchas veces el resultado obtenido será diferente al esperado.

Veamos el primer ejemplo:

console.log(false == 0)
Enter fullscreen mode Exit fullscreen mode

En javascript existen lo que denomina como valores falsy y son los siguientes:

  • 0
  • -0
  • 0n
  • false
  • null
  • undefined
  • NaN
  • Cualquier tipo de cadena vacía: '', ""

Todos estos valores son considerados como falsos para el lenguaje.

Como 0 es un valor falsy entonces, aunque no lo veamos, javascript hace algo como esto tras bambalinas:

console.log(false == false)
Enter fullscreen mode Exit fullscreen mode

Y como estamos usando el operador de comparación débil == nos limitamos a comparar los valores mas NO los tipos de datos.
En conclusión, la respuesta es true por coerción de tipos

Pasemos al siguiente ejemplo:

console.log(false === 0)
Enter fullscreen mode Exit fullscreen mode

Al usar el operador estricto de comparación === comparamos tanto el valor como el tipo de dato, false es de tipo boolean y 0 es de tipo number ergo, la respuesta es false.
En otras palabras, también es correcto afirmar que al usar el === javascript no hace coerciones de tipo, por ello es ampliamente sugerido usarlo.

Espero que la explicación sea de tu agrado.

Collapse
 
chema profile image
José María CL •

Excelente

Collapse
 
elementos123 profile image
elementos123 •

console.log(false == 0)

El código de arriba es true, debido a que no compara el tipo de dato con el que estás haciendo la condicional. Debido a que 0 es false y 1 es true, esto hace que false y 0 sean lo mismo en el resultado final.

Mientras que en console.log(false===0)

Ese === verifica si es el mismo tipo de dato y si el valor es el mismo.

Es false porque false es un booleano y 0 es un entero, entonces no son el mismo tipo de datos por lo cual dice false.

booleano no es igual a entero, se cual sea su valor.

Esto es lo que aprendí yo en su día cuando aprendí javascript.

Un saludo.

Collapse
 
chema profile image
José María CL •

Mm creo que porque el operador == hace una conversión de los operandos al mismo tipo y el === no... ni me acuerdo dónde ví eso. Ya me dio duda jeje

Collapse
 
lautarojayat profile image
Lautaro Jayat •

Lo hermoso de Javascript es que todo es posible y la magia existe.
La gente no lo entiende y piensa que son falencias en el lenguaje.