Menu

Valores truthy y falsy en JavaScript: lista completa

Qué se considera truthy y falsy en JavaScript, la lista completa de valores falsy y cómo funciona la coerción a booleano en el código real.

Todo valor tiene su "estado de ánimo" booleano

En JavaScript puedes meter cualquier valor donde se espera un booleano: dentro de un if, como condición de un while, o junto a && o ||. Cuando lo haces, ese valor se convierte a true o false mediante coerción booleana. Los valores que se convierten en false se llaman falsy, y el resto son truthy.

index.js
Output
Click Run to see the output here.

Sin funciones de conversión ni casts explícitos: JavaScript lo hace solo. Las reglas son pocas y están fijadas, así que en cuanto memorices la lista de valores falsy, todo lo demás cae por su propio peso.

Lista completa de valores falsy en JavaScript

Solo hay siete valores falsy. Absolutamente todo lo demás en el lenguaje es truthy.

index.js
Output
Click Run to see the output here.

Eso es todo. La lista completa:

  • false — el booleano en sí.
  • 0 y -0 — ambos ceros.
  • 0n — el cero de BigInt.
  • "" — la cadena vacía (con comillas simples, dobles o backticks, da igual).
  • null — el valor "intencionalmente nada".
  • undefined — el valor "sin asignar".
  • NaN — el resultado de operaciones inválidas como 0 / 0.

Memoriza estos siete. Después, cuando tengas dudas sobre cualquier valor, pregúntate: "¿está entre esos siete?". Si la respuesta es no, es truthy.

Las sorpresas: "0", [] y {}

Aquí es donde más se tropiezan los principiantes. Hay un montón de valores que parecen vacíos pero en realidad son truthy:

index.js
Output
Click Run to see the output here.

Las cadenas solo son falsy cuando no tienen ningún carácter. "0" tiene un carácter, así que es truthy. Los arrays y objetos son siempre truthy —incluso cuando están vacíos—, porque JavaScript los trata como objetos, y todos los objetos son truthy sin importar lo que contengan.

Si vienes de Python, este es el mayor cambio de chip. En Python, [] y {} son falsy. En JavaScript, no.

Cómo comprobar si algo está "vacío" correctamente

Como [] y {} son truthy, no puedes usarlos directamente en un if para saber si están vacíos. Hay que ser explícito:

index.js
Output
Click Run to see the output here.

Lo mismo pasa con los strings: si quieres tratar una cadena con solo espacios como vacía:

index.js
Output
Click Run to see the output here.

Truthy/falsy es un atajo cómodo, pero no te exime de pensar qué significa "vacío" para tus datos.

Cómo convertir un valor a booleano real

A veces necesitas un true o false de verdad, no un valor meramente truthy. Hay dos formas idiomáticas de hacerlo:

index.js
Output
Click Run to see the output here.

Boolean(x) es la conversión explícita. !!x es lo mismo pero en versión corta: el primer ! convierte a booleano y lo invierte, y el segundo ! lo vuelve a invertir. Las dos formas se usan un montón. !! es más breve; Boolean() se lee más claro.

La doble negación !! aparece mucho en sentencias return, cuando quieres que una función devuelva un booleano limpio:

index.js
Output
Click Run to see the output here.

Truthy y falsy con && y ||

Los operadores lógicos en JavaScript no devuelven true ni false: devuelven uno de los operandos. Cuál de los dos te toca depende de si el valor es truthy o falsy:

index.js
Output
Click Run to see the output here.

Por eso value || defaultValue es un patrón tan habitual para asignar valores por defecto. Pero tiene una trampa: considera todos los valores falsy por igual, incluidos 0 y "", que muchas veces son entradas perfectamente válidas:

index.js
Output
Click Run to see the output here.

Si lo que quieres es usar un valor por defecto únicamente cuando tengas null o undefined, recurre al operador de coalescencia nula ??. Tienes un documento dedicado a ese tema.

Chuleta rápida

index.js
Output
Click Run to see the output here.

Imprímela, pégala en el monitor y sigue con tu vida.

Siguiente: iteradores y generadores

Ya dominas los condicionales y los bucles, así que en el próximo capítulo veremos cómo JavaScript permite que los valores se produzcan bajo demanda. Los iteradores y generadores son la maquinaria detrás de for...of, el spread y buena parte de las APIs modernas: los vemos a continuación.

Preguntas frecuentes

¿Cuáles son los valores falsy en JavaScript?

Son exactamente siete: false, 0, -0, 0n (el cero de BigInt), '' (string vacío), null, undefined y NaN. Todo lo demás es truthy, incluidos '0', 'false', [] y {}. Si te aprendes esa lista corta de falsy, el resto sale por descarte.

¿Un array vacío es truthy o falsy en JavaScript?

Truthy. El bloque if ([]) { ... } se ejecuta, cosa que sorprende a quien viene de Python o PHP. Los arrays y los objetos son objetos, y todos los objetos son truthy independientemente de lo que contengan. Para comprobar si un array está vacío, usa arr.length === 0 de forma explícita.

¿Cómo convierto un valor a booleano en JavaScript?

Tienes dos formas: Boolean(value) es la versión explícita y !!value es el atajo (una doble negación que convierte y vuelve a invertir). Ambas siguen las mismas reglas de truthy/falsy. Úsalas cuando necesites un true/false de verdad y no solo un valor "que parezca" truthy.

Aprende a programar con Coddy

COMENZAR