Guia completo: como converter string em booleano no JavaScript

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que "true" não é igual a true?

\n\n

Imagine a seguinte situação: você está desenvolvendo o frontend de uma loja virtual. O usuário marca a opção "Receber notificações por e-mail" e seu código salva essa preferência no localStorage como a string "true". Na próxima visita, você lê essa string e tenta verificar a condição:

\n\n
let userPref = localStorage.getItem('notifications');\nif (userPref) {\n    // Ativar notificações\n}\n
\n\n

Surpresa: a condição sempre é verdadeira! Mesmo que no localStorage esteja a string "false", o JavaScript a considera um valor truthy. Isso não acontece porque você fez algo errado, mas porque qualquer string não vazia em JS é considerada true.

\n\n

Esse problema é tão comum que a pergunta no Stack Overflow já acumulou milhares de visualizações e dezenas de soluções diferentes. Hoje vamos entender de uma vez por todas como converter corretamente uma string em booleano no JavaScript, analisar 5 métodos funcionais e descobrir qual é o melhor.

\n\n

Por que não posso simplesmente usar if()?

\n\n

Vamos logo esclarecer essa dúvida. Muitos iniciantes pensam: "Se eu escrever if(str), a string "false" vai se tornar false". Isso é um erro perigoso.

\n\n

No JavaScript, existem apenas 6 valores considerados falsy (falsos):

\n
    \n
  • false
  • \n
  • 0 (zero)
  • \n
  • "" (string vazia)
  • \n
  • null
  • \n
  • undefined
  • \n
  • NaN
  • \n
\n\n

Todo o resto é truthy. A string "false" não é vazia — tem 5 caracteres. Portanto, ela é truthy. O mesmo vale para "0", "null" e até "undefined". A conversão simples com if() ou Boolean() não funciona para strings.

\n\n

Top 5 métodos para converter string em booleano

\n\n

Testamos todos os métodos populares encontrados em discussões do Stack Overflow e em projetos reais. Aqui estão eles, do pior ao melhor.

\n\n

Método 1: Operador ternário (o mais óbvio, mas verboso)

\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

Vantagem: Fácil de entender para iniciantes.
\nDesvantagem: O código cresce rapidamente se você precisar tratar "yes", "1", "on". Você terá que escrever uma longa cadeia de condições.

\n\n

Método 2: JSON.parse() (elegante, mas rigoroso)

\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'));  // Erro! Retorna null\n
\n\n

O método JSON.parse() consegue interpretar as strings "true" e "false" como valores booleanos. Porém, há um detalhe: ele é sensível a maiúsculas e minúsculas. "True" ou "TRUE" geram um erro. Por outro lado, JSON.parse("null") retorna null, e não false — o que pode ser útil em alguns casos.

\n\n

Método 3: Expressão regular (flexível, mas mais lento)

\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

Aqui usamos a flag i (case insensitive) e tratamos várias variações de "verdade": true, yes, 1, on.

Blogs

Book Recommendations