Introdução: por que isso é importante?
Imagine a situação: você está escrevendo uma calculadora de gorjetas em JavaScript. O usuário digita o valor da conta no campo de entrada, clica no botão — e recebe... undefined ou, pior ainda, a string "10010" em vez do número 110. Familiar? Se você está apenas começando sua jornada na programação, o problema de converter string em número em JavaScript é um daqueles "erros clássicos" que absolutamente todos cometem.
No Stack Overflow, a pergunta "How can I convert a string to an integer in JavaScript?" acumulou milhares de visualizações e centenas de respostas. Isso significa que até desenvolvedores experientes às vezes se confundem com os detalhes. Hoje vamos entender de uma vez por todas como converter string em número em JavaScript corretamente, quais métodos funcionam, quais não funcionam e por que o resultado às vezes é inesperado.
Pronto? Então vamos lá!
Por que converter string em número?
JavaScript é uma linguagem de tipagem dinâmica. Isso é legal porque você não precisa pensar sobre tipos de dados… até encontrar um bug. O problema é que os dados de prompt(), campos de formulário input, parâmetros de URL ou APIs sempre chegam como strings. Mesmo que o usuário tenha digitado "42", o JavaScript vê não um número, mas um conjunto de caracteres.
Tente somar duas strings:
let a = "10";let b = "20";console.log(a + b); // "1020"Viu? Em vez da soma 30, você obteve uma concatenação. Para evitar isso, você precisa dizer explicitamente ao JavaScript: "Ei, isso são números, trabalhe com eles como números!".
Método nº1: parseInt() — o clássico
A maneira mais popular de converter string em número inteiro em JavaScript é a função parseInt(). Ela recebe uma string e "extrai" dela o número inteiro, ignorando tudo que vem depois dos dígitos.
Sintaxe e exemplos
let str = "42";let num = parseInt(str);console.log(num); // 42 (número)
// Funciona até com "lixo" após os dígitosconsole.log(parseInt("123px")); // 123console.log(parseInt("10.99")); // 10 (descarta a parte decimal)
// Mas se a string não começar com um dígito...console.log(parseInt("abc123")); // NaNconsole.log(parseInt(" 7")); // 7 (espaços no início são ignorados)Importante: parseInt() para no primeiro caractere não numérico. Se a string começar com uma letra — você obtém NaN (Not a Number).
Segundo argumento — base numérica
Poucos sabem, mas parseInt() tem um segundo parâmetro — radix (base do sistema numérico). Isso evita bugs com números octais:
// Sem radix pode haver confusãoconsole.log(parseInt("010")); // 10 (em IE antigo podia ser 8)
// Sempre especifique 10 para o sistema decimalconsole.log(parseInt("010", 10)); // 10console.log(parseInt("FF", 16)); // 255 (hexadecimal)Dica de profissional: sempre passe o segundo argumento 10 se estiver trabalhando com números decimais. Isso torna o código mais claro e seguro.
Método nº2: Number() — rigoroso, mas honesto
A função Number() é uma maneira mais rigorosa de converter string em número em JavaScript. Ao contrário de parseInt(), ela não tolera nenhum caractere estranho.
console.log(Number("42")); // 42console.log(Number("10.99")); // 10.99 (preserva a parte decimal)console.log(Number("123px")); // NaN (string contém caracteres extras)console.log(Number("")); // 0 (string vazia = 0)console.log(Number(" ")); // 0Quando usar: se você tiver 100% de certeza de que a string contém apenas um número (por exemplo, após validação de formulário). Para entrada do usuário, é melhor usar parseInt() ou