Qual é a diferença entre tipos de dados primitivos e não primitivos?
Em JavaScript, entender a diferença entre tipos de dados primitivos e não primitivos é importante para escrever código eficiente e livre de bugs.
Essas duas categorias de tipos de dados se comportam de maneira diferente em termos de como são armazenadas na memória e como são manipuladas em seus programas.
Tipos de dados primitivos são a forma mais simples de dados em JavaScript. They include number, bigint, string, boolean,
null, undefined, and symbol. Esses tipos são chamados de "primitivos" porque representam valores únicos e não são objetos.
Quando você trabalha com tipos de dados primitivos, você está lidando diretamente com seus valores. Por exemplo, quando você cria uma variável com um valor primitivo, esse valor é armazenado diretamente na variável.
Valores primitivos são imutáveis, o que significa que, uma vez criados, seu valor não pode ser alterado. No entanto, você pode reatribuir um novo valor à variável. Aqui está um exemplo de como trabalhar com tipos de dados primitivos:
let num1 = 5;
let num2 = num1;
num1 = 10;
console.log(num2); // 5
Neste exemplo, estamos atribuindo um valor primitivo (5) de num1 para num2. Isso cria uma cópia independente do valor. Como resultado, quaisquer alterações feitas na variável original (num1) não afetam a cópia (num2).
Tipos de dados não primitivos, por outro lado, são mais complexos. Em JavaScript, estes são objetos, que incluem objetos regulares, arrays e funções. Ao contrário dos tipos primitivos, os tipos não primitivos podem conter múltiplos valores como propriedades ou elementos.
Quando você cria uma variável com um valor não primitivo, o que é armazenado na variável é na verdade uma referência para o local na memória onde o objeto está armazenado, não o próprio objeto. Isso leva a algumas diferenças importantes no comportamento. Aqui está um exemplo com tipos não primitivos:
const originalPerson = { name: "John", age: 30 };
const copiedPerson = originalPerson;
originalPerson.age = 31;
console.log(copiedPerson.age); // 31
Neste exemplo temos um objeto chamado originalPerson com duas propriedades name e age. Em seguida, atribuímos o objeto originalPerson a uma variável chamada copiedPerson.
Então atualizamos o valor age para o objeto originalPerson. Quando registramos a propriedade age do objeto copiedPerson ele mostra o valor atualizado.
Mas por que isso está acontecendo? Isso ocorre porque tanto originalPerson quanto copiedPerson estão referenciando o mesmo objeto na memória.
Em JavaScript, quando você atribui um objeto a outra variável, você está copiando a referência para o objeto, não o próprio objeto. Isso é conhecido como cópia superficial por referência. Como resultado, quaisquer alterações feitas no objeto através de uma referência são refletidas em todas as referências a esse objeto.
À medida que você continua a trabalhar com JavaScript, encontrará muitas situações em que entender a diferença entre tipos primitivos e não primitivos é importante. É um conceito fundamental que sustenta muitos aspectos da linguagem e é essencial para escrever código eficiente e correto.Este módulo não possui perguntas. Marque como concluído.