Te tengo un desafío ¡Pero sin hacer trampa! Controla tus impulsos de buscar en Google o de leer más abajo ¿En Javascript, qué retorna esta expresión: "" && "Hola"
?
¿Tienes una respuesta? Si estás leyendo esto antes de tener una respuesta voy a estar muy decepcionado. Ok, confío en que ya lo pensaste. La respuesta correcta es que esa expresión retorna ""
¿Sorprendido? ¡Yo me sorprendí cuando lo supe! Estaba seguro de que la respuesta sería false
. Mi confusión nace por no entender bien la definición de la expresión a && b
:
Lo que yo pensaba:
a && b => b si a es truthy, false en otro caso
La definición real
a && b => b si a es truthy, a en otro caso
Las definiciones clave acá son truthy
y falsy
. Dos términos con nombres aparentemente inofensivos. En una condición booleana, una expresión es truthy
si es considerada true
y falsy
si es considerada false
. Esto no quiere decir eso si que la expresión sea true
o false
¡Parece obvio ahora! Al yo del pasado no le parece tan obvio y no está muy feliz de que nos riamos de su ignorancia.
La expresión ""
es falsy
, pero no es false
, y por eso la expresión "" && "Hola"
es ""
, y no false
. ¿La moraleja? Estas expresiones se evalúan distinto cuando están en una condición booleana. Si quieres realmente evaluar una variable en su valor booleano puedes ocupar el operador !!
, la doble negación convierte un valor truthy
a true
, y un valor falsy
a false
.
La expresión que necesitaba era !!"" && "Hola"
que efectivamente se evalúa false
.
Esta técnica es muy utilizada en React Native. Si lo has ocupado sabrás que no se puede colocar un string en cualquier parte, pues causa un error. Justamente el error que tuve yo al evaluarse la condición como el string vacío ""
¡Ojalá te evite algún dolor de cabeza en el futuro!