Page cover

7.2.3 - Variáveis

🧬 Tipos de Dados em JavaScript: O que estou guardando?

🧬 Tipos de Dados em JavaScript: O que estou guardando?

Agora que você já sabe criar variáveis e entende seus tipos básicos, chegou a hora de se aprofundar: 🔍 O que exatamente essas variáveis estão guardando? 💾 Como o JavaScript trata cada tipo por trás das cortinas?

Bora mergulhar no universo dos tipos de dados! 🚀


🔢 Tipos Primitivos: Os blocos básicos

Os tipos primitivos são como os tijolinhos básicos da linguagem. Eles não são objetos, são valores diretos, simples e imutáveis.

Tipo
Exemplo
Características principais

string

"Oi"

Textos, entre aspas simples ou duplas

number

42, 3.14

Qualquer número (inteiro ou decimal)

boolean

true, false

Lógica: sim ou não, ligado ou desligado

undefined

(sem valor)

A variável foi criada, mas não tem valor ainda

null

null

Intencionalmente sem valor

bigint

123456789n

Números enormes, além do limite do number

symbol

Symbol("id")

Identificadores únicos (mais avançado)

⚠️ Importante:

  • Primitivos não são objetos

  • Não têm métodos próprios (mas o JS pode envolver eles temporariamente para operar)


🧳 Tipos de Referência: Estruturas mais complexas

Esses tipos são mais como malas que carregam vários valores dentro.

Tipo
Exemplo
O que guarda?

object

{ nome: "Ana", idade: 19 }

Um conjunto de pares chave:valor

array

[1, 2, 3]

Uma lista ordenada

function

function soma() {}

Um bloco de código que pode ser executado

date, map, set, etc.

(mais avançados)

Objetos especiais para tarefas específicas

💡 Características:

  • Guardam referência (endereço) na memória

  • Podem ser alterados internamente

  • São mutáveis


🧠 Stack vs Heap: Onde os dados moram?

🧱 Stack (pilha):

  • Guarda os tipos primitivos

  • Espaço de memória rápido e pequeno

  • Cada valor é copiado

📦 Heap (monte):

  • Guarda os tipos de referência

  • Espaço de memória maior e mais lento

  • Valores são acessados por referência


⚖️ Comparando os tipos

🔁 Comparando tipos primitivos

let a = 10;
let b = 10;

console.log(a === b); // true ✅

➡️ Os valores são iguais e estão separados na memória


🔁 Comparando tipos de referência

let obj1 = { nome: "João" };
let obj2 = { nome: "João" };

console.log(obj1 === obj2); // false ❌

➡️ Mesmo que o conteúdo seja igual, os objetos estão em lugares diferentes na memória


🧬 Comparando primitivo com referência

let nome = "Lucas"; // primitivo
let obj = { nome: "Lucas" }; // referência

console.log(nome === obj.nome); // true ✅

➡️ Aqui estamos comparando valores primitivos (ambos são strings), então dá certo.


🪄 Conversão de tipos

🔃 Primitivo virando referência (boxing automático)

let texto = "oi";
console.log(texto.toUpperCase()); // "OI"

Mesmo sendo um string primitivo, o JavaScript cria um objeto temporário só pra executar o método!


🔃 Referência virando primitivo

let pessoa = { nome: "Ana", idade: 20 };
console.log(pessoa.nome); // "Ana"

A gente acessa um valor primitivo que está dentro do objeto.


🧪 Exemplos que causam erro (ou confusão)

🧨 Copiando objetos

let pessoa1 = { nome: "João" };
let pessoa2 = pessoa1;

pessoa2.nome = "Carlos";

console.log(pessoa1.nome); // "Carlos" 😱

➡️ Como pessoa1 e pessoa2 apontam pro mesmo lugar, alterar um afeta o outro!


✅ Copiando corretamente

let pessoa1 = { nome: "João" };
let pessoa2 = { ...pessoa1 }; // spread operator

pessoa2.nome = "Carlos";

console.log(pessoa1.nome); // "João" 😎

🧭 Quando usar cada tipo?

Use primitivos quando:

✅ Você precisa de um valor simples ✅ O valor não vai mudar internamente ✅ Precisa de comparações diretas ou números/textos básicos


Use referência quando:

✅ Você precisa agrupar dados ✅ Precisa manipular listas, pares de valor ✅ Vai alterar os valores internamente (como editar um perfil)


👩‍🏫 Boas práticas

✅ Prefira const para objetos e arrays que não serão reatribuídos ✅ Use let só quando precisar alterar ✅ Use nomes claros para tipos de referência (dadosUsuario, listaDeProdutos) ✅ Use métodos como slice(), map(), filter() para copiar arrays com segurança


🚫 Más práticas

❌ Reatribuir tipos diferentes na mesma variável ❌ Alterar objetos sem verificar se são cópias ou referências ❌ Comparar objetos diretamente achando que eles são “iguais”


🧠 Dica avançada: tipos foram criados para organizar o caos!

Imagine um mundo onde tudo fosse só texto! 😵

  • "5" + "5" viraria "55", e não 10

  • Você nunca saberia se "true" é verdadeiro mesmo...

➡️ Os tipos organizam a lógica, ajudam o computador a entender o que fazer e evitam bugs estranhos.


💬 Observação importante: Comentários no seu código 📝

Sabe quando você escreve um bilhetinho pra lembrar algo? Ou deixa uma dica pra outra pessoa entender o que você fez? No código, a gente faz isso com comentários! 👀✨


📌 O que são comentários?

Comentários são linhas no código que o computador ignora. Elas servem apenas para ajudar você e outras pessoas a entender o que está acontecendo no programa.


✍️ Como fazer um comentário?

✅ Comentário de uma linha:

// Isso é um comentário de uma linha
let nome = "Ana"; // Também pode estar no final de uma linha

✅ Comentário de várias linhas:

/*
  Esse é um comentário
  que ocupa mais de uma linha.
  Muito útil pra explicações maiores!
*/
let idade = 21;

🎯 Para que servem os comentários?

  • 👨‍🏫 Explicar o que o código faz

  • 🧠 Escrever ideias para implementar depois

  • ❌ Desativar uma linha de código sem apagar (pra testar)

  • 💬 Deixar o código mais legível pra outras pessoas (ou pra você mesmo no futuro!)


⚠️ Dica de ouro: use com equilíbrio!

🟢 Boas práticas:

  • Comentar o porquê de algo (não só o que faz)

  • Explicar partes mais complicadas do código

  • Ser claro e direto

🔴 Más práticas:

  • Escrever comentário inútil:

    let idade = 18; // define idade
  • Encher o código de comentário sem necessidade

  • Deixar comentários antigos que não fazem mais sentido


💡 Exemplo real:

// Verifica se o usuário é maior de idade
if (idade >= 18) {
  console.log("Você pode acessar o sistema.");
} else {
  console.log("Acesso negado para menores de idade.");
}

🧼 Lembre sempre:

Um código bem escrito quase não precisa de comentário. Mas um bom comentário pode salvar seu futuro-eu ou ajudar alguém do seu time! 🚀


✨ Recapitulando

  • Primitivos: simples, imutáveis, copiados na stack

  • Referência: complexos, mutáveis, apontam para a heap

  • Comparar objetos = comparar endereços

  • Converter tipos é comum, mas exige atenção

  • Cuidar de como você copia e altera variáveis evita bugs!


🔗 Quer se aprofundar mais? Fontes confiáveis pra explorar 🕵️‍♀️

Se você ficou curioso(a) com tudo que a gente viu até aqui — variáveis, tipos de dados, memória, stack, heap e indireção — aqui vão alguns links maneiros pra você explorar com calma, todos em português e super respeitados na comunidade de programação. 🌍💻


📦 Como uma variável funciona no fundo do computador?

👉 Funcionamento do armazenamento de uma variável Uma explicação bem detalhada sobre como os valores são guardados na memória, o que acontece no momento em que você escreve algo como let x = 10, e como isso vira informação que o computador entende. Ótimo pra quem quer entender o que rola "por trás da cortina"! 🎩✨


🔤 O que é uma variável, afinal?

👉 O que é uma variável? Esse link traz uma explicação mais ampla sobre o conceito de variável, desde a origem matemática até como ela se aplica na programação. Super útil pra reforçar o que a gente já viu, e ver outros pontos de vista. 📘


🧭 O que é "indireção"? Parece complicado, mas calma!

👉 O que é indireção? Aqui entra um conceito mais técnico, mas MUITO importante: a indireção. Em poucas palavras, é quando uma variável aponta pra outra coisa, e não para um valor direto — tipo o que acontece com objetos e arrays! Esse link explica de forma clara com exemplos simples.


🧠 Onde ficam as variáveis na memória? Stack e Heap na prática

👉 O que são e onde estão a stack e heap? Esse aqui é um verdadeiro mapa da mina pra quem quer entender como o computador organiza a memória. Explica onde ficam os dados simples (stack) e os mais complexos (heap), e como isso influencia o comportamento das variáveis. Ideal pra reforçar o que a gente viu na seção anterior. 📊📈


💬 Dica de ouro:

Essas discussões vêm da comunidade do Stack Overflow em Português, um site onde programadores e programadoras ajudam uns aos outros com dúvidas reais. É uma ótima fonte pra aprender, mas também pra participar, perguntar e ajudar quando você estiver pronto(a). 👥💬


📚 Estudar com fontes diferentes te ajuda a ver o mesmo conceito por ângulos diferentes. Então, aproveita esses links pra revisar, reforçar e até aprender um pouco mais do que foi falado aqui.

E lembre-se: cada clique que você dá em busca de aprender é um passo a mais no seu futuro na tecnologia! 🚀

Last updated