'' == '0' // false
El lado izquierdo es un hilo vacío, y el lado derecho es un hilo con un carácter. Son falsos porque está haciendo una comparación entre dos cadenas idénticas (gracias Niall).
0 == '' // true
Por lo tanto, por lo que éste es verdad, porque es 0
Falsy y la cadena vacía es Falsy.
0 == '0' // true
Esto es un poco más complicado. La especificación establece que si los operandos son una cadena y un número, entonces fuerza la cadena al número. '0'
se convierte en 0
. Gracias smfoote.
false == undefined // false
El valor undefined
es especial en JavaScript y no es igual a cualquier otra cosa excepto null
. Sin embargo, es falsy.
false == null // false
Nuevamente, null
es especial. Solo es igual a undefined
. También es falsy.
null == undefined // true
null
y undefined
son similares, pero no iguales. null
significa nada, mientras que undefined
es el valor de una variable no establecida o no existente. Tendría sentido que sus valores se consideren iguales.
Si quieres ser realmente confundido, mira esto ...
'\n\r\t' == 0
Una cadena que consiste solamente en los espacios en blanco se considera igual a 0.
Douglas Crockford hace que una gran cantidad de recomendaciones, pero no tiene que tomarlos como un evangelio. :)
T.J. Crowder hace una excelente sugerencia de estudiar el ECMAScript Language Specification para conocer toda la historia detrás de estas pruebas de igualdad.
¿Lectura adicional?
The spec.
yolpo (on falsy values)
La mejor manera de responder a esta pregunta es leer la especificación: http://www.ecma-international.org/publications/standards/Ecma-262.htm Si realmente quiere saber el quid de la cuestión, de por qué las declaraciones anteriores son como son, realmente no hay una mejor manera.Esté preparado de que puede ser un poco difícil en algunos lugares, pero si hace una pregunta como esta, vale la pena el esfuerzo. –
@ T.J. Crowder Muy buena sugerencia (+1), edité ese enlace en mi respuesta, espero que no te importe. – alex
@alex: por supuesto que no. :-) –