javascript-falsy-y-truthy

Valores falsy y truthy en TypeScript

En JavaScript, los valores se dividen en dos categorías: truthy y falsy. Estos términos se refieren a cómo se comportan los valores cuando se evalúan como un booleano.

  • Los valores truthy evalúan como valores verdaderos
  • Los valores falsy evalúan como valores falsos

Esta conversión automática ocurre cuando el valor se emplea en un contexto que espera un booleano (por ejemplo, cuando se usan como condición en un condicional, o se comparan con un operador).

truthy y falsy son dos conceptos que se usan muchísimo en JavaScript. Pero no os preocupéis, que son muy sencillos de entender.

Si las palabritas te resultan algo absurdas tranquilo/a… no eres al único 😄

Valores Falsy

Los valores falsy son aquellos que, cuando se evalúan en un contexto booleano, se consideran como false.

Hay solo seis valores en JavaScript que se consideran falsy:

  1. false: El valor booleano false es obviamente falsy.
  2. 0: El número cero es falsy.
  3. "" (cadena vacía): Una cadena sin caracteres es falsy.
  4. null: Representa la ausencia de cualquier valor y es falsy.
  5. undefined: Significa que una variable ha sido declarada pero no asignada, y es falsy.
  6. NaN: Significa “Not-a-Number” lo cual es falsy (es el resultado de una operación matemática inválida)

Vamos a verlo con un ejemplo,

if (!0) {
    console.log("0 es un valor falsy");
}

if (!null) {
    console.log("null es un valor falsy");
}

Valores Truthy

Los valores truthy son aquellos que, cuando se evalúan en un contexto booleano, se consideran como true.

Cualquier valor que no sea falsy se considera truthy. Esto incluye prácticamente todo lo demás:

  • Números distintos de 0: Todos los números diferentes de 0, ya sean positivos o negativos
  • Cadenas no vacías: Cualquier cadena con al menos un carácter, incluyendo “0” o “false”
  • Objetos y arrays: Cualquier objeto o array, incluso vacíos
  • El valor booleano true: Obviamente 😉

Por ejemplo,

if ("hello") {
    console.log("Una cadena no vacía es truthy");
}

if ({}) {
    console.log("Un objeto vacío es truthy");
}

Importancia de Truthy y Falsy

En JavaScript (y en otros lenguajes en menor medida), algunos programadores tienen la costumbre confiar en la evaluación implícita de estas propiedades para “simplificar” el código.

Así se ahorran comparar explícitamente con true o false (que les deben cobrar las letras o algo)

Por ejemplo:

let username = "John";

if (username) {
    console.log("El usuario ha proporcionado un nombre");
} else {
    console.log("El nombre de usuario está vacío");
}

En este código,

  • username se evalúa directamente en la condición del if.
  • Si username es una cadena no vacía (truthy), la primera rama se ejecutará.
  • Si es una cadena vacía (falsy), se ejecutará la segunda rama.

A ver como digo esto… no hagáis eso. No confiéis en las conversiones automáticas a booleanos

Si queréis hacer una comprobación, hacerla correctamente. Porque luego os cambian cualquier cosa en el código, y vuestro condicional pasa a funcionar incorrectamente