Valores Primitivos e Valores Não Primitivos
- #JavaScript
- #React
- #Angular
VALORES PRIMITIVOS E NÃO PRIMITIVOS
VALORES PRIMITIVOS
São representados diretamente através do mais baixo nível da implementação de uma linguagem.
Todos os primitivos são imutáveis, ou seja, o valor armazenado em um endereço de memória não pode ser modificado.
No JavaScript existem 6 tipos de primitivos:
- String;
- Number;
- Boolean;
- Null;
- Undefined;
- Symbol.
ATRIBUIÇÕES DE VALOR PRIMITIVO
Quando alteramos uma variável com um valor primitivo, devido a sua imutabilidade, cria-se um novo valor em um novo endereço de memória, o qual ela passará a apontar. O mesmo acontece quando atribuímos uma variável a outra.
Bora ver na prática?
let value = 'Eduardo';
let newValue = value;
Nesse exemplo as duas variáveis são iguais, pois ambas contém um valor primitivo que pode ser comparado dentro do JavaScript, mas se alteramos alguma delas, essa alteração não será refletida na outra.
Isso é o que podemos chamar de atribuição por valor pois as variáveis não compartilham a mesma referência em memória, sendo independentes.
VALORES NÃO PRIMITIVOS OU VALORES DE REFERÊNCIA
No JavaScript podemos dizer que os valores não primitivos englobam o tipo Object e Function, que no caso do JavaScript arrays, objetos literais, Map e etc, são do tipo Object.
ATRIBUIÇÕES DE VALOR NÃO PRIMITIVO
Quando atribuímos um valor de referência (não primitivo) de uma variável para outra, cria-se uma nova referência para o mesmo objeto real armazenado ho heap (grande área de memória), ou seja, ambas as variáveis referenciam o mesmo objeto.
Bora ver na prática?
const reference = { name: 'Eduardo' };
const newReference = { name: 'Eduardo' };
console.log(reference === newReference); //false
No exemplo acima, se utilizamos o operador de comparação entre objetos iguais temos um false como resultado, pois são objetos diferentes, contem as mesmas informações mas possuem referências diferentes.
const reference = { name: 'Eduardo' };
const newReference = { name: reference };
console.log(reference === newReference); //true
Nesse outro exemplo, como podemos ver, o operador de comparação retorno true devido a comparação ser com o mesmo objeto, isso é o que chamamos de atribuição por referência.
Esse é o tipo de atribuição que devemos ter mais atenção e cuidado, pois se alterarmos o objeto por qualquer uma das variáveis, será refletindo na outra.
CONCLUSÃO
Entender os diferentes tipos de dados de uma linguagem é essencial para se trabalhar em alto nível, sem entender a diferença de atribuir um valor ou uma referência a uma variável, fica complexo de entender o fluxo de dados da aplicação. Não é um conceito difícil de se entender e espero que você tenha entendido como criar vantagens em diferentes contextos, mutando ou não suas estruturas de dados.
JÁ SABIA DISSO?
Fique ligado para mais truques de JavaScript!
#html5 #css3 #javascript #reactjs #angular #vuejs #nodejs #expressjs #webdeveloper #software #informationtechnology #frontenddeveloper #coder #coding #programmer #programming