Sobes.tech
Junior

Qual é a diferença entre os diferentes tipos de dados?

sobes.tech IA

Resposta da IA

Em JavaScript, os dados dividem-se em tipos primitivos e objetos.

Tipos primitivos:

  • String: Sequência de caracteres. Imutável.
  • Number: Números, incluindo inteiros e de ponto flutuante, bem como Infinity, -Infinity e NaN.
  • Boolean: Valor lógico (true ou false).
  • Null: Valor especial que representa a ausência de um objeto.
  • Undefined: Valor de uma variável à qual não foi atribuído valor.
  • Symbol: Tipo primitivo único e imutável, usado para identificadores de propriedades de objetos.
  • BigInt: Números inteiros de comprimento arbitrário.

Objetos:

  • Object: Coleção de pares chave-valor. Mutável. Exemplos: arrays, funções, expressões regulares, datas.

Principais diferenças:

  1. Mutabilidade: Os tipos primitivos são imutáveis, ou seja, seu valor não pode ser alterado diretamente. Ao tentar modificá-los, uma nova cópia é criada. Os objetos são mutáveis, suas propriedades podem ser adicionadas, removidas e modificadas.
  2. Passagem por valor/por referência: Os tipos primitivos são passados por valor (o próprio valor é copiado). Os objetos são passados por referência (é copiada a referência ao local na memória onde o objeto está armazenado).
  3. Comparação: Os tipos primitivos são comparados por valor. Os objetos são comparados por referência (duas variáveis apontam para o mesmo objeto na memória).
// Exemplos
let str1 = "hello";
let str2 = str1; // str2 obtém uma cópia do valor de str1
str1 = "world"; // Uma nova string "world" é criada para str1
console.log(str2); // "hello" - str2 não mudou

let obj1 = { name: "Alice" };
let obj2 = obj1; // obj2 obtém a referência ao mesmo objeto que obj1
obj1.name = "Bob"; // A propriedade do objeto referenciado é modificada
console.log(obj2.name); // "Bob" - obj2 mudou

let num1 = 10;
let num2 = 10;
console.log(num1 === num2); // true - os valores são comparados

let objA = { value: 1 };
let objB = { value: 1 };
console.log(objA === objB); // false - as referências são comparadas (apontam para objetos diferentes mesmo que tenham o mesmo conteúdo)

Tabela de diferenças:

Característica Tipos primitivos Objetos
Mutabilidade Imutáveis Mutáveis
Passagem Por valor Por referência
Comparação Por valor Por referência
Armazenamento Diretamente na variável Referência ao local na memória
Tipos de dados String, Number, Boolean, Null, Undefined, Symbol, BigInt Objeto (incluindo arrays, funções, etc.)