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)
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)
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)
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.
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:
En javascript existen lo que denomina como valores
falsy
y son los siguientes:0
-0
0n
false
null
undefined
NaN
'', ""
Todos estos valores son considerados como falsos para el lenguaje.
Como
0
es un valorfalsy
entonces, aunque no lo veamos, javascript hace algo como esto tras bambalinas: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 tiposPasemos al siguiente ejemplo:
Al usar el operador estricto de comparación
===
comparamos tanto el valor como el tipo de dato,false
es de tipoboolean
y0
es de tiponumber
ergo, la respuesta esfalse
.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.
Excelente