Introducción: ¿Por qué "true" no es igual a true?
\n\nImagina 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:
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.
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\nAclaremos esto de inmediato. Muchos principiantes piensan: «Si escribo if(str), la cadena "false" se convertirá en false». Esto es un peligroso error.
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
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.
Top 5 métodos para convertir una cadena a boolean
\n\nProbamos todos los métodos populares de las discusiones en Stack Overflow y proyectos reales. Aquí están, de peor a mejor.
\n\nMétodo 1: Operador ternario (el más obvio, pero engorroso)
\n\nfunction 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\nVentaja: Claro para principiantes.
\nDesventaja: El código se vuelve extenso si necesitas manejar "yes", "1", "on". Tendrás que escribir una cadena de condiciones.
Método 2: JSON.parse() (elegante, pero estricto)
\n\nfunction 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\nEl 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.
Método 3: Expresión regular (flexible, pero lenta)
\n\nfunction 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\nAquí usamos la bandera i (insensible a mayúsculas/minúsculas) y manejamos varias variantes de «verdad»: true, yes, 1,