DEV Community

Cristian Fernando
Cristian Fernando

Posted on • Updated 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.

Discussion (5)

Collapse
duxtech profile image
Cristian Fernando Author • Edited on

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