JavaScript: Tipos de Dados em JavaScript
Última atualização: 2026-10-13
Tipos de dados determinam quais operações você pode realizar — números suportam aritmética, strings suportam concatenação, booleanos suportam condicionais. Entender tipos ajuda a evitar as armadilhas mais clássicas do JS.
1. Tipos de Dados do JS
JavaScript tem 8 tipos de dados, divididos em primitivos e tipos de referência:
Primitivos (7 tipos): String, Number, BigInt, Boolean, Undefined, Null, Symbol
Tipo de referência (1 tipo): Object (arrays, funções, datas, etc. são todos subtipos de Object)
Dados primitivos são armazenados na memória stack e copiados por valor durante a atribuição. Dados de tipo de referência são armazenados na memória heap e copiados por referência (endereço) durante a atribuição. Essa distinção será abordada em profundidade em lições posteriores.
typeof é um operador que verifica tipos de dados e retorna uma string:
| Valor | Resultado do typeof |
|---|---|
"olá" |
"string" |
42 |
"number" |
9007199254740991n |
"bigint" |
true |
"boolean" |
undefined |
"undefined" |
null |
"object" (bug histórico) |
{ } |
"object" |
function(){} |
"function" |
Nota: typeof null retorna "object" — este é um bug histórico desde o início do JS que nunca pode ser corrigido (mudar isso quebraria código existente). Apenas lembre-se.
3. Armadilhas de String e Number
O operador + no JS serve para dois propósitos: adição numérica e concatenação de strings. Quando um lado do + é uma string, JS converte o outro valor para string também:
"5" + 3vira"53"(concatenação de string, não matemática)5 + 3vira8(adição matemática)"5" - 3vira2(subtração não tem semântica de concatenação, então converte automaticamente para números)
Esta é uma das armadilhas mais clássicas do JS — todo iniciante cai nela. A solução: use Number() ou parseInt() para conversão explícita antes de operações matemáticas.
4. null vs undefined
Ambos significam "sem valor", mas diferem na intenção:
- undefined: uma variável foi declarada mas não atribuída, ou uma propriedade não existe — "nenhum valor dado ainda"
- null: o desenvolvedor explicitamente definiu como vazio — "intencionalmente definido como nada"
Pense assim: undefined é uma casa nova sem móveis ainda; null é quando você deliberadamente tirou todos os móveis.
▶ Exemplo: typeof com Vários Tipos
▶ Experimente▶ Exemplo: Armadilhas de String e Number
▶ Experimente▶ Exemplo: null vs undefined
▶ Experimente▶ Exemplo: Todos os Tipos de Dados de Uma Vez
▶ Experimente❓ Perguntas Frequentes
typeof null retorna "object"?null tinha todos os bits baixos zero — iguais ao identificador de objeto — então foi classificado incorretamente. Tentaram corrigir depois, mas mudar isso quebraria muito código existente, então o bug se tornou permanente. É como um prédio com fundação torta — muita gente mora lá para demolir.typeof retorna "object" tanto para arrays quanto para objetos, então não pode distingui-los. A abordagem correta é Array.isArray() — por exemplo, Array.isArray([1,2]) retorna true, enquanto Array.isArray({}) retorna false.NaN (Not a Number — Não é um Número) tem typeof NaN retornando "number". Ainda mais estranho, NaN === NaN retorna false — não é nem igual a si mesmo. Use isNaN() ou Number.isNaN() para verificar NaN.📖 Resumo
- JS tem 8 tipos de dados: 7 primitivos + 1 tipo de referência (Object)
- O operador
typeofverifica tipos, mastypeof nullretorna"object"— um bug histórico +concatena quando uma string está envolvida —"5" + 3dá"53", não8nullsignifica "intencionalmente vazio";undefinedsignifica "nenhum valor ainda" — eles não são estritamente iguais- Use
Number()ouparseInt()para conversão explícita antes de operações matemáticas para evitar armadilhas de coerção implícita - Arrays
[]também retornam"object"do typeof — useArray.isArray()para distinguir arrays de objetos
📝 Exercícios
- Básico: Declare 6 variáveis para 6 tipos primitivos (String, Number, Boolean, Undefined, Null, Object), use
typeofem cada uma e exiba os resultados na página. - Intermediário: Crie uma página com um campo de entrada. Quando o usuário inserir qualquer valor, JS detecta seu tipo usando typeof e exibe o resultado. Tente inserir números, strings, true, null, etc., e observe a saída do typeof.
- Desafio: Crie uma página de "Quiz de Armadilhas de Tipo" com 5 perguntas de múltipla escolha testando conhecimento de coerção de tipo, como o que
"1" + 2resulta, senull == undefinedé true ou false, etc. Mostre feedback correto/incorreto com explicações quando o usuário clicar em uma opção.