null e undefined
Você já viu os booleanos — sim ou não claro. Um programa também precisa dizer às vezes «não há valor aqui.» O JavaScript tem dois vazios comuns: undefined e null. Parecem parecidos, mas cada história é diferente. Aqui separamos os dois para que conversões e checagens depois façam sentido.
Qual é a diferença entre null e undefined?
undefined costuma significar «ainda não colocaram nada» — variável com let sem atribuição, ou algo que falta. null significa «vazio de propósito»: você (ou uma API) atribui null para limpar um lugar. Confira com typeof: typeof undefined é "undefined", mas typeof null é a peculiaridade antiga "object". Prefira === ao comparar. Ambos são falsy, mas não são booleanos (true / false).
Kit de valores vazios
📊 null versus undefined para iniciantes
| Ideia | Exemplo | Resultado / nota |
|---|---|---|
| Ausente / sem atribuição | let x; depois x |
undefined |
| Vazio intencional | let box = null |
você escolhe vazio |
typeof ausente |
typeof undefined |
"undefined" |
typeof vazio |
typeof null |
"object" (peculiaridade — ainda significa vazio) |
| Comparação estrita | box === null |
true quando box guarda null |
| Comparação frouxa | null == undefined |
true com == — prefira === por clareza |
undefined — ainda sem atribuição
Declare um nome com let e não atribua. O valor é undefined. Registre o valor e o typeof para fixar o rótulo "undefined".
let nickname;
console.log(nickname);
console.log(typeof nickname);
null — vazio de propósito
Atribua null quando quiser sinalizar com clareza «sem valor». Isso é diferente de esquecer a atribuição.
let selected = null;
console.log(selected);
console.log(typeof selected);
typeof lado a lado
Coloque os dois resultados juntos. Lembre: typeof null mostrando "object" é peculiaridade — ainda não é uma lição completa de objetos.
console.log(typeof undefined);
console.log(typeof null);
let a;
let b = null;
console.log(typeof a);
console.log(typeof b);
Prefira === para null e undefined
=== pergunta valor e tipo. Use quando quiser «exatamente null» ou «exatamente undefined». Com ==, null e undefined podem coincidir — fácil de ler mal ao aprender.
let user = null;
let title;
console.log(user === null);
console.log(title === undefined);
console.log(user === undefined);
== frouxo pode misturá-los
Com ==, null e undefined coincidem. Registre uma vez — depois mantenha as checagens reais com ===.
console.log(null == undefined);
console.log(null === undefined);
A primeira linha é true porque == é frouxo. A segunda é false. Escreva as checagens reais com === para manter a intenção clara.
Mostre os dois vazios na página
Guarde um nome no estilo undefined e outro com null, depois escreva rótulos curtos com textContent.
<!DOCTYPE html>
<html>
<head>
<title>null and undefined — labels</title>
</head>
<body>
<p id="out">…</p>
<script>
let title;
let avatar = null;
document.getElementById("out").textContent =
"title=" + title + " | avatar=" + avatar;
</script>
</body>
</html>
O parágrafo mostra os dois vazios numa linha. Mude só avatar para uma string curta, atualize e confirme que a metade direita muda enquanto title continua undefined.
Experimente você mesmo
- Declare
let city;— registrecityetypeof citysem atribuir. - Coloque
let bag = null;— registre o valor etypeof bag(espere a peculiaridade"object"). - Registre
typeof undefinedetypeof nulljuntos para ver o contraste. - Compare com
===: uma variávelnullfrente anulle frente aundefined. - Registre uma vez
null == undefined; depois escreva as checagens reais com===. - Na demo HTML, defina
avatarcomo"pic.png", atualize e leia a nova linha.
Erros comuns
- Tratar
nulleundefinedcomo sempre intercambiáveis — o significado muda (intencional vs. sem atribuição) - Entrar em pânico quando
typeof nullé"object"— peculiaridade;nullcontinua vazio intencional - Confiar em
==entre eles sem notar a coincidência frouxa - Chamar qualquer um de booleano — são vazios; booleanos são só
true/false - Confundir a string vazia
""comnull—""ainda é texto
Resumo
undefined: ausente / ainda sem atribuição;typeof→"undefined"null: vazio intencional que você atribui;typeof→"object"(peculiaridade)- Prefira
===para checagens claras; ambos são falsy, mas não booleanos - A string vazia
""é texto — não é o mesmo quenullouundefined - Próximo: conversão de tipos — transformar de propósito um valor de um tipo em outro
🧠 Teste Seu Conhecimento
Teste Seu Conhecimento
Desafie-se com este questionário interativo e veja o quão bem você entende o tópico
📝 Instruções
- Leia cada pergunta cuidadosamente
- Selecione a melhor resposta para cada pergunta
- Você pode refazer o quiz quantas vezes quiser
- Seu progresso será mostrado no topo