Estoy confundido por el siguiente código:
Boolean(' '); // true Boolean(''); // false +' '; // 0 +''; // 0Mis suposiciones:
Boolean(' ') se evalúa como true , ' ' es un valor verdadero.Boolean('') se evalúa como false , '' es un valor falso.+ intenta convertir su operando en un número, debe convertir un valor falso en 0 y un valor verdadero en 1. Pregunta: ¿Por qué el operador unario + convierte un valor real (es decir ' ' ) en 0?
Siéntase libre de señalar todo lo que está mal en mis suposiciones y cualquier cosa que me esté perdiendo. ¡Muchas gracias!
=================
EDITAR DESPUÉS DE LAS TRES RESPUESTAS INICIALES
Gracias chicos, sois geniales, y tenéis razón! Esto es lo que encontré en las especificaciones de ES6:
"La conversión de una cadena a un valor numérico (...:) Este valor se determina en dos pasos: primero, se deriva un valor matemático (MV) del literal numérico de cadena; segundo, este valor matemático se redondea como se describe a continuación El MV en cualquier símbolo gramatical, que no se proporciona a continuación, es el MV para ese símbolo definido en 11.8.3.1.
El MV de StringNumericLiteral ::: [vacío] es 0.
El MV de StringNumericLiteral ::: StrWhiteSpace es 0.
El MV de StringNumericLiteral ::: StrWhiteSpaceopt StrNumericLiteral StrWhiteSpaceopt es el MV de StrNumericLiteral, sin importar si el espacio en blanco está presente o no".
(Fuente: https://262.ecma-international.org/6.0/#sec-runtime-semantics-mv-s )
Entonces eso explicaría por qué tanto +'' como +' ' evalúan como 0.
También estaba confundido por qué Boolean() no evaluó ambos a false :
La operación abstracta ToBoolean convierte el argumento en un valor de tipo booleano de acuerdo con la Tabla 10: (...) Cadena: Devuelve falso si el argumento es la Cadena vacía (su longitud es cero); de lo contrario, devuelve verdadero.
Fuente: https://262.ecma-international.org/6.0/#sec-toboolean
Por eso es que Boolean(''); // false y Boolean(' '); // true .
¡Muchas gracias por tu ayuda! :)