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

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