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".
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.
<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:
- Operador
+: se um lado for string, o outro é convertido para string para concatenação - Comparação
==: converte tipos antes de comparar, com regras complexas difíceis de lembrar
<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:
<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:
<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 |
<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❓ Perguntas Frequentes
"5" - 3 é igual a 2 em vez de lançar um erro?- 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.Number("") retorna 0 em vez de NaN?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.null == 0 é false?==, 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
- Converta strings para números com
Number(),parseInt(),parseFloat() - Converta números para strings com
String(n),n.toString(), oun.toFixed(2) - Coerção implícita acontece automaticamente:
==coagete tipos (use===),+com strings vira concatenação - Armadilhas comuns:
"5" - 3é 2,"5" + 3é "53",null == undefinedé true - Converta para Boolean:
!!valueouBoolean(value)— seis valores falsos:false/0/""/null/undefined/NaN
📝 Exercícios
- 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. - 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). - 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.