Professional Documents
Culture Documents
JAVASCRIPTLINGUAGENSSOFTWARE
JavaScript é uma linguagem orientada a objetos: isso significa que a maioria das coisas em
JavaScript são Objetos. Por exemplo, as funções são Objetos. Os únicos elementos que não
são objetos são os Dados de Tipos Primitivos: string, number, boolean, null e undefined.
Esses tipos de dados primitivos também são imutáveis, o que significa que, uma vez
Uma das diferenças entre os dois é que os dados de tipos primitivos são passados
https://braziljs.org/blog/diferencas-entre-valor-e-referencia-em-javascript/ 1/5
08/03/2019 Diferenças entre "Valor" e "Referência" em JavaScript - BrazilJS
DADOS DE TIPOS PRIMITIVOS SÃO PASSADOS COMO VALOR E OBJETOS SÃO PASSADOS COMO REFERÊNCIA.
Por Valor: Significa criar uma CÓPIA do original. Imagine gêmeos: eles nascem exatamente
iguais, mas o primeiro gêmeo não tem seu cabelo modificado quando o segundo gêmeo corta
o próprio.
Por Referência: Significa criar um APELIDO (alias) para o original. Quando sua mãe te
chama de “Doce de Leite”, embora seu nome seja Eduardo, isso não cria um clone de você
mesmo: você ainda é você, mas você pode ser chamado por esses dois nomes muito
diferentes.
Vamos ver a forma como os valores primitivos e os objetos se comportam, primeiro quando
atribuímos valores com o operador de atribuição (=) e segundo quando passamos para uma
name = "Carla";
console.log(name); // "Carla"
console.log(firstName); // "Carlos"
O resultado é bastante direto: é o operador = está trabalhando por valor. O que realmente
Uma variável name é criada e recebe o valor “Carlos”. Um pedaço de memória em JavaScript
Uma variável firstName é criada e recebe uma cópia do valor de name. firstName tem seu
https://braziljs.org/blog/diferencas-entre-valor-e-referencia-em-javascript/ 2/5
08/03/2019 Diferenças entre "Valor" e "Referência" em JavaScript - BrazilJS
Em seguida, alteramos o valor de name para “Carla”. Mas firstName ainda mantém seu valor
AO TRABALHAR COM VALORES PRIMITIVOS, O OPERADOR = CRIA UMA CÓPIA DA VARIÁVEL ORIGINAL.
myName.firstName = "Carla";
console.log(myName.firstName); // "Carla"
console.log(identity.firstName); // "Carla"
Aqui, o resultado é o mesmo para as variáveis que contêm objetos. Isso ocorre porque, ao
lidar com objetos, o operador = funciona por referência. O que realmente acontece pode ser
Uma variável myName é criada e recebe o valor de um objeto que possui uma propriedade
Uma variável identity é criada, apontando uma referência para myName. Não há espaço em
memória dedicado ao valor identity. Ele apenas aponta para o valor do myName.
Quando logamos myName.firstName, ele exibe o novo valor, que é esperado. Mas quando nós
de myName.firstName.
https://braziljs.org/blog/diferencas-entre-valor-e-referencia-em-javascript/ 3/5
08/03/2019 Diferenças entre "Valor" e "Referência" em JavaScript - BrazilJS
AO TRABALHAR COM OBJETOS, O OPERADOR = CRIA UM ALIAS PARA O OBJETO ORIGINAL, ELE NÃO CRIA
DADOS DE TIPOS PRIMITIVOS SÃO PASSADOS PARA UMA FUNÇÃO COMO VALOR
Se você alterar o valor de um dado de tipo primitivo dentro de uma função, essa alteração
myNameIs(myName);
console.log(myName); // "Carlos"
Mesmo que mudando a variávelmyName dentro da função myNameIs, quando logamos, depois de
chamar a função, ela ainda possui o valor “Carlos”. Isso ocorre porque quando os tipos
Estamos passando uma cópia de myName: qualquer coisa que você faça para myNamedentro do
corpo da função não afetará myName no escopo global, porque você está passando uma cópia
Quando você está passando algo por referência, você está passando algo que aponta para
outra coisa, e não uma cópia do objeto. Portanto, como o JavaScript passa objetos por
referência, quando você altera uma propriedade desse objeto dentro da função, a alteração
myNameIs(myName);
https://braziljs.org/blog/diferencas-entre-valor-e-referencia-em-javascript/ 4/5
08/03/2019 Diferenças entre "Valor" e "Referência" em JavaScript - BrazilJS
Logando a variável myName depois de ter invocado a função myNameIs, irá mostrar um objeto
com uma chave firstName com um valor igual a “Carla”. O objeto mudou no escopo global
Isso ocorre porque quando você passa um objeto para a função, você não está passando uma
cópia. Você está passando algo que aponta para o objeto myName. Então, quando você altera
uma propriedade desse objeto na função, você está mudando a propriedade do objeto no
escopo externo.
myNameIs(myName);
Aqui logamos o valor da variável myName no escopo externo, e verificamos que não foi
adicionado uma propriedade nickName ao objeto. Por quê? Se você olhar com atenção, o que
estamos tentando fazer na função é reatribuir o objeto myName com um novo valor.
Você não pode alterar onde myName aponta, você só pode alterar uma propriedade dentro do
myNameIs(myName);
CRÉDITOS
GRASP “BY VALUE” AND “BY REFERENCE” IN JAVASCRIPT, escrito originalmente por LÉNA FAURE
TAGS
https://braziljs.org/blog/diferencas-entre-valor-e-referencia-em-javascript/ 5/5