O JavaScript tem dois grandes grupos de tipos de dados: primitivos e referência. Entender a diferença entre eles é crucial para evitar bugs sutis em seu código.
São valores imutáveis e armazenados diretamente na posição de memória que a variável acessa.
- String - Texto entre aspas:
"Olá",'Mundo' - Number - Valores numéricos:
42,3.14 - Boolean - Valores lógicos:
true,false - undefined - Valor de variáveis não inicializadas
- null - Representa ausência intencional de valor
- Symbol (ES6) - Valor único e imutável
- BigInt (ES2020) - Números inteiros de precisão arbitrária
// Exemplos de valores primitivos
const nome = "Maria";
const idade = 30;
const ativo = true;
const indefinido = undefined;
const nulo = null;
const simbolo = Symbol("descrição");
const numeroGrande = 9007199254740991n; // BigIntSão objetos armazenados por referência. Variáveis destes tipos não contêm diretamente o valor, mas uma referência (ponteiro) para o local na memória onde o objeto está armazenado.
- Object - Objetos literais, instâncias
- Array - Coleções ordenadas
- Function - Funções e métodos
- Date - Datas
- RegExp - Expressões regulares
- Map, Set, etc. (Coleções ES6)
// Exemplos de valores de referência
const pessoa = { nome: "João", idade: 25 };
const frutas = ["maçã", "banana", "laranja"];
const somar = function(a, b) { return a + b; };
const hoje = new Date();
const regex = /\d+/g;let a = 5;
let b = a; // 'b' recebe uma cópia do valor de 'a'
a = 10;
console.log(a); // 10
console.log(b); // 5 - não foi afetado pela mudança em 'a'let obj1 = { nome: "Ana" };
let obj2 = obj1; // 'obj2' aponta para o mesmo objeto que 'obj1'
obj1.nome = "Maria";
console.log(obj1.nome); // "Maria"
console.log(obj2.nome); // "Maria" - foi afetado pela mudança em 'obj1'// Primitivos: comparação por valor
console.log(5 === 5); // true
console.log("abc" === "abc"); // true
// Referências: comparação por referência
console.log({} === {}); // false (referências diferentes)
console.log([] === []); // false (referências diferentes)
const obj = {};
console.log(obj === obj); // true (mesma referência)