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,-InfinityeNaN. - Boolean: Valor lógico (
trueoufalse). - 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:
- 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.
- 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).
- 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.) |