Convertir una cadena a valor booleano en JavaScript: guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: ¿Por qué "true" no es igual a true?

\n\n

Imagina esta situación: estás escribiendo el frontend para una tienda en línea. El usuario selecciona la opción «Recibir notificaciones por correo electrónico» y tu código la guarda en localStorage como una cadena "true". En la siguiente visita, lees esa cadena e intentas verificar la condición:

\n\n
let userPref = localStorage.getItem('notifications');\nif (userPref) {\n    // Activar notificaciones\n}\n
\n\n

¡Y aquí viene la sorpresa: la condición siempre se cumple! Incluso si en localStorage hay una cadena "false", JavaScript la considera un valor truthy (verdadero). No porque hayas hecho algo mal, sino porque cualquier cadena no vacía en JS es true.

\n\n

Este problema es tan popular que la pregunta en Stack Overflow ha acumulado miles de visitas y docenas de soluciones. Hoy vamos a entender de una vez por todas cómo convertir correctamente una cadena a boolean en JavaScript, revisaremos 5 métodos funcionales y encontraremos el mejor de ellos.

\n\n

¿Por qué no se puede usar simplemente if()?

\n\n

Aclaremos esto de inmediato. Muchos principiantes piensan: «Si escribo if(str), la cadena "false" se convertirá en false». Esto es un peligroso error.

\n\n

En JavaScript existen los valores falsy (falsos). Solo hay 6:

\n
    \n
  • false
  • \n
  • 0 (cero)
  • \n
  • "" (cadena vacía)
  • \n
  • null
  • \n
  • undefined
  • \n
  • NaN
  • \n
\n\n

Todo lo demás es truthy. La cadena "false" no está vacía, tiene 5 caracteres. Por lo tanto, es truthy. Lo mismo ocurre con "0", "null" e incluso "undefined". Una simple conversión con if() o Boolean() no funcionará para cadenas.

\n\n

Top 5 métodos para convertir una cadena a boolean

\n\n

Probamos todos los métodos populares de las discusiones en Stack Overflow y proyectos reales. Aquí están, de peor a mejor.

\n\n

Método 1: Operador ternario (el más obvio, pero engorroso)

\n\n
function stringToBoolean(str) {\n    return str === 'true' ? true : str === 'false' ? false : null;\n}\n\nconsole.log(stringToBoolean('true'));  // true\nconsole.log(stringToBoolean('false')); // false\nconsole.log(stringToBoolean('yes'));   // null\n
\n\n

Ventaja: Claro para principiantes.
\nDesventaja: El código se vuelve extenso si necesitas manejar "yes", "1", "on". Tendrás que escribir una cadena de condiciones.

\n\n

Método 2: JSON.parse() (elegante, pero estricto)

\n\n
function stringToBoolean(str) {\n    try {\n        return JSON.parse(str);\n    } catch (e) {\n        return null;\n    }\n}\n\nconsole.log(stringToBoolean('true'));  // true\nconsole.log(stringToBoolean('false')); // false\nconsole.log(stringToBoolean('TRUE'));  // ¡Error! Devuelve null\n
\n\n

El método JSON.parse() puede analizar las cadenas "true" y "false" en valores booleanos. Pero hay un detalle: es sensible a mayúsculas y minúsculas. "True" o "TRUE" causarán un error. En cambio, JSON.parse("null") devolverá null, no false — esto puede ser útil.

\n\n

Método 3: Expresión regular (flexible, pero lenta)

\n\n
function stringToBoolean(str) {\n    if (typeof str !== 'string') return null;\n    return /^(true|yes|1|on)$/i.test(str.trim());\n}\n\nconsole.log(stringToBoolean('true'));  // true\nconsole.log(stringToBoolean('YES'));   // true\nconsole.log(stringToBoolean('off'));   // false\nconsole.log(stringToBoolean('0'));     // false\n
\n\n

Aquí usamos la bandera i (insensible a mayúsculas/minúsculas) y manejamos varias variantes de «verdad»: true, yes, 1,

Blogs

Book Recommendations