Valores Primitivos e Valores de Referência no JavaScript
Neste tutorial você vai aprender as diferenças entre os valores primitivos e de referências no JavaScript.
English version: https://www.javascripttutorial.net/javascript-primitive-vs-reference-values/
Acessando por valor e referência
No JavaScript, uma variável pode armazenar dois tipos de valores: primitivo e referência.
Quando você atribui um valor a uma variável, o motor JavaScript determinará se o valor é primitivo ou de referência.
É fornecido no JavaScript seis tipos primitivos:
undefined
null
boolean
number
string
symbol
…e um tipo de referência:
object
O tamanho de valor primitivo é fixo, portanto, o JavaScript armazena o valor primitivo na pilha.
Por outro lado, o tamanho de um valor de referência é dinâmico, o JavaScript armazena o valor de referência no heap.
Se o valor for um tipo primitivo, ao acessar a variável, você manipula o valor real armazenado nessa variável. Em outras palavras, a variável que armazena um valor primitivo é acessada por por valor.
Quando você manipula um objeto, trabalha na referência desse objeto, e não no objeto real. Isso significa que uma variável que armazena um objeto é acessada por referência.
Para obter o tipo de um valor primitivo, use o operador typeof
, por exemplo:
Outro exemplo:
Para encontrar o tipo de um valor de referência, use o operador instanceof
:
No exemplo a seguir a variável rgb
é uma instância do objeto Array
:
Copiando valores primitivos
Quando você atribuir uma variável que armazena um valor primitivo a outra variável, o valor armazenado é criado e copiado na nova variável.
Vamos ver um exemplo:
Primeiro, declaramos uma variável a
e a inicializamos seu valor com o número 10
.
Segundo, declaramos outra variável b
e atribuímos a ela o valor da variável a
.
Internamente, o motor do JavaScript copia o valor armazenado em a
para b
.
Terceiro, atribuímos à variável b
um novo valor, o número 20
.
Como a
e b
não se relacionam, quando alteramos o valor de b
o valor da variável a
não muda.
Copiando valores de referência
Quando você atribui um valor de referência de uma variável para outra, o valor armazenado na variável também é copiado no local da nova variável.
A diferença é que os valores armazenados nas duas variáveis agora são o endereço do objeto real armazenado no heap. Como resultado, ambas as variáveis estão referenciando o mesmo objeto.
Veja o exemplo:
Primeiro, declaramos uma variável x
que contém um objeto cuja propriedade é name: 'John'
.
Segundo, declaramos outra variável y
atribuindo o valor de x
para essa nova variável y
.
Agora x
e y
estão fazendo referência ao mesmo objeto no heap.
Terceiro, modificamos o valor armazenado na propriedade name
do objeto usando a variável y
.
Como ambas variáveis x
e y
fazem referência ao mesmo objeto, a alteração também será refletida se você acessar o objeto usando a variável x
.
Neste tutorial você aprendeu sobre o acesso por valor ou por referência e também as diferenças entre eles.
Veja o índice de todos os tutoriais JavaScript
Confira uma série de outros tutoriais JavaScript que eu escrevi, clicando no link abaixo: