JavaScript: Conversão de Tipos em JavaScript

Última atualização: 2026-10-13

A conversão de tipos é a parte mais propensa a erros do JavaScript. Um número digitado em um formulário? Acontece que é uma string! "5" + 3 resulta em "53" em vez de 8 — todo iniciante encontra essas "surpresas".

Métodos globais:parseFloat() parseInt() Number()

1. Métodos de Conversão de Tipo e Armadilhas

Valores de input de formulários HTML são sempre strings, mesmo com type="number". Você deve converter os tipos antes de fazer contas, ou os resultados serão imprevisíveis.

HTML
<div id="demo"></div>
<script>
const input = "42";
const resultado = input + 8;
document.getElementById("demo").textContent = 'input + 8 = ' + resultado + ' (tipo: ' + typeof resultado + ')';
</script>

(2) Conversão Explícita: String(), Number(), Boolean()

Chamar funções de conversão explicitamente deixa sua intenção clara — esta é a abordagem recomendada:

Conversão Sintaxe Exemplo
Para string String(valor) String(123) → "123"
Para número Number(valor) Number("42") → 42
Para booleano Boolean(valor) Boolean(0) → false

(3) Conversão Implícita: Concatenação com + e Comparação com ==

O motor JavaScript realiza conversão automática de tipos que frequentemente produz resultados inesperados:

HTML
<script>
console.log("5" + 3);       // "53" (número 3 convertido para string)
console.log("5" - 3);       // 2 (string "5" convertida para número)
console.log("" == 0);       // true (string vazia convertida para 0)
console.log(null == undefined); // true
</script>

(4) Erros Comuns

Estes são erros de alta frequência em entrevistas e no desenvolvimento real:

HTML
<script>
console.log("5" + 3);        // "53"   + concatena quando vê uma string
console.log("5" - 3);        // 2      - só faz subtração, converte string para número
console.log("5" * 3);        // 15     * também converte para número
console.log(true + 1);       // 2      true converte para 1
console.log(false + 1);      // 1      false converte para 0
console.log("" + 0);         // "0"    número converte para string
console.log("" == 0);        // true   ambos os lados convertem para números
console.log(null == 0);      // false  null só é igual a undefined
console.log("0" == false);   // true   ambos convertem para 0
</script>

Lembre desta regra: + concatena quando encontra uma string; todos os outros operadores aritméticos convertem strings para números.

(5) Regras de Conversão do Number()

Entrada Resultado
Number("42") 42
Number("3.14") 3.14
Number("") 0 (string vazia → 0, pegadinha clássica)
Number(" ") 0 (string só com espaço → 0)
Number("42px") NaN (contém caracteres não numéricos → NaN)
Number(true) 1
Number(false) 0
Number(null) 0
Number(undefined) NaN

String vazia converte para 0 em vez de NaN — esse design já enganou incontáveis desenvolvedores.

(6) Regras de Conversão do Boolean() (Valores Falsy)

Estes 6 valores convertem para false e são chamados de valores falsy. Todo o resto é true:

HTML
<script>
console.log(Boolean(false));     // false
console.log(Boolean(0));         // false
console.log(Boolean(-0));        // false
console.log(Boolean(""));        // false
console.log(Boolean(null));      // false
console.log(Boolean(undefined)); // false
console.log(Boolean(NaN));       // false
</script>

Nota: Boolean("0") é true, e Boolean([]) também é true — strings não vazias e arrays não vazios são truthy.

(7) === Igualdade Estrita vs == Igualdade Solta

Operador Comportamento Recomendação
=== Retorna false se os tipos diferirem Sempre use
== Converte tipos antes de comparar Evite
HTML
<script>
console.log(5 === "5");   // false (tipos diferentes)
console.log(5 == "5");    // true (string convertida para número primeiro)
console.log(null === undefined); // false
console.log(null == undefined);  // true
</script>

Regra de ferro: sempre use ===, nunca ==. A menos que saiba exatamente o que está fazendo (ex: value == null casa tanto null quanto undefined).


▶ Exemplo: Comparação de Conversão de Tipos

▶ Experimente

▶ Exemplo: Referência Rápida de Valores Falsy do Boolean()

▶ Experimente

▶ Exemplo: Cálculo com Valores de Formulário

▶ Experimente

▶ Exemplo: Comparação === vs ==

▶ Experimente

Métodos globais:parseFloat() parseInt() Number()

❓ Perguntas Frequentes

P Por que "5" - 3 é igual a 2 em vez de lançar um erro?
R Porque o operador - só faz operações matemáticas, então o JavaScript converte a string para número automaticamente. Apenas o operador + é ambíguo (pode ser adição ou concatenação), então ele concatena quando vê uma string. Todos os outros operadores (-, *, /, %) sempre convertem para números.
P Por que Number("") retorna 0 em vez de NaN?
R Essa é uma escolha de design legada. Uma string vazia é considerada como "sem número", equivalente a 0. Isso significa que Number(input.value) retorna 0 para campos vazios em vez de NaN, o que pode enganar a lógica posterior. Use input.value.trim() === "" para verificar valores vazios primeiro.
P Por que null == 0 é false?
R Em comparações com ==, null só converte de/para undefined — ele não converte para números. Então null == 0 é false, mas null == undefined é true. Esse é um caso especial definido pela especificação.

📖 Resumo


📝 Exercícios

  1. Sem executar o código, preveja os resultados destas expressões: "10" + 5, "10" - 5, "10" * "2", true + true, Boolean("false"), "1" == 1, "1" === 1. Depois escreva código para verificar.
  2. Escreva uma função calcularIMC(peso, altura) onde os parâmetros vêm de inputs de formulário (strings). A função deve converter os tipos internamente antes de calcular o IMC, e tratar entradas vazias ou inválidas (retornar uma mensagem de erro).
  3. Escreva uma função compararEstrito(a, b) que use apenas === para comparação. Se os tipos diferirem, retorne "Tipos diferentes, não é possível comparar" diretamente; se os tipos coincidirem, retorne o resultado da comparação.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%