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
falsyy son los siguientes:0-00nfalsenullundefinedNaN'', ""Todos estos valores son considerados como falsos para el lenguaje.
Como
0es un valorfalsyentonces, 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
truepor coerción de tiposPasemos al siguiente ejemplo:
Al usar el operador estricto de comparación
===comparamos tanto el valor como el tipo de dato,falsees de tipobooleany0es de tiponumberergo, 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