You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/04-object-basics/02-object-copy/article.md
+17-17Lines changed: 17 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,12 +1,12 @@
1
-
# Referência e cópia de objeto
1
+
# Referências e cópias de objetos
2
2
3
-
Uma das diferenças fundamentais entre objetos e primitivos é que objetos são armazenados e copiados por "referência", enquanto valores primiticos: strings, números, booleanos, etc -- são sempre copiados "como um valor integral".
3
+
Uma das diferenças fundamentais entre objetos e primitivos é que objetos são armazenados e copiados por "referência", enquanto valores primitivos: strings, números, booleanos, etc -- são sempre copiados "como um valor integral".
4
4
5
5
Isso é fácil de entender se olharmos um pouco por debaixo dos panos do que acontece quando copiamos um valor.
6
6
7
7
Vamos começar com um primitivo, como uma string.
8
8
9
-
Aqui colocamos uma cópia de `message`em`phrase`
9
+
Aqui fazemos uma cópia de `message`para`phrase`
10
10
11
11
```js
12
12
let message ="Hello!";
@@ -23,7 +23,7 @@ Objetos não são assim.
23
23
24
24
**Uma variável atribuída a um objeto armazena não o próprio objeto, mas sim o seu "endereço em memória" -- em outras palavras "uma referência" a ele.**
25
25
26
-
Vamos analisar um exemplo dessa variável
26
+
Vamos analisar o exemplo dessa variável
27
27
28
28
```js
29
29
let user = {
@@ -37,13 +37,13 @@ E aqui é como ela realmente está armazenada na memória
37
37
38
38
O objeto é armazenado em algum lugar na memória (à direita da imagem), enquanto a variável `user` (à esquerda) possui uma referência a ele.
39
39
40
-
Podemos pensar em uma variável de objeto, como `user`, como uma folha de papel com o endereço do objeto escrito nela.
40
+
Podemos pensar em uma variável de objeto, `user`, como uma folha de papel com o endereço do objeto escrito nela.
41
41
42
-
Quando realizamos acões com o objeto, por exemplo, acessar a propriedade `user.name`, o motor do Javascript verifica o que está nesse endereço e realiza a operação no objeto real.
42
+
Quando realizamos ações com o objeto, por exemplo, acessar a propriedade `user.name`, o motor do Javascript verifica o que está nesse endereço e realiza a operação no objeto real.
43
43
44
-
Agora está aqui o motivo pelo qual isso é importante.
44
+
Agora está aqui o motivo pelo qual isso é importante:
45
45
46
-
**Quando uma variavel de objeto é copiada, a referência é copiada, mas o próprio objeto não é diplicado**
46
+
**Quando uma variável de objeto é copiada, a referência é copiada, mas o próprio objeto não é diplicado**
47
47
48
48
Por exemplo:
49
49
@@ -79,7 +79,7 @@ alert(*!*user.name*/!*); // 'Pete', alterações são vistas a partir da referê
79
79
80
80
Dois objetos são iguais apenas se possuem a mesma referência.
81
81
82
-
Por exemplo, aqui `a` e `b`referencia o mesmo objeto, portanto eles são iguais:
82
+
Por exemplo, aqui `a` e `b`faz referência ao mesmo objeto, por isso eles são iguais:
83
83
84
84
```js run
85
85
let a = {};
@@ -117,7 +117,7 @@ user.name = "Pete"; // (*)
117
117
alert(user.name); // Pete
118
118
```
119
119
120
-
Pode parecer que a linha `(*)` causaria uum erro, mas não causa. O valor de `user` é constante, ele deve sempre referenciar o mesmo objeto, porém as propriedades desse objeto são livres para mudar.
120
+
Pode parecer que a linha `(*)` causaria um erro, mas não causa. O valor de `user` é constante, ele deve sempre referenciar o mesmo objeto, porém as propriedades desse objeto são livres para mudar.
121
121
122
122
Em outras palavras, o `const user` gera um erro apenas se tentarmos definir `user=...` como um todo.
123
123
@@ -130,7 +130,7 @@ Sim, copiar uma variável de objeto cria mais uma referência para o mesmo objet
130
130
131
131
Mas e se precisamos duplicar um objeto?
132
132
133
-
Podemos crar um novo objeto e replicar a estrutura existente, iterando sobre suas propriedades e copiando-as no nível primitivo.
133
+
Podemos criar um novo objeto e replicar a estrutura existente, iterando sobre suas propriedades e copiando-as no nível primitivo.
// copia todas as prorpeidades de permissions1 e permissions2 para user
180
+
// copia todas as propriedades de permissions1 e permissions2 para user
181
181
Object.assign(user, permissions1, permissions2);
182
182
*/!*
183
183
@@ -299,9 +299,9 @@ let clone = structuredClone(user);
299
299
alert(clone.me === clone); // true
300
300
```
301
301
302
-
Como você pode ver `clone.me`referencia the `clone`, não o`user`! , As you can see, `clone.me` references the `clone`, not the `user`!Então a referência circular foi clonada também.
302
+
Como você pode ver `clone.me`faz referência a `clone`, não a`user`! , Então a referência circular foi clonada corretamente também.
303
303
304
-
No entante, existem casos em que `structuredClone` falha.
304
+
No entanto, existem casos em que `structuredClone` falha.
305
305
306
306
Por exemplo, quando um objeto possui uma propriedade que é uma função:
307
307
@@ -318,8 +318,8 @@ Para lidar com casos complexos, podemos precisar usar uma combinação de métod
318
318
319
319
## Resumo
320
320
321
-
Objetos são atribuídos e copiados por referêbcia. Em outras palavras, uma variável armazena não o "valor do objeto", mas uma "referência" (endereço em memória) para o valor. Portanto, copiar tal variável ou passá-la como argumente de uma função copia essa referência, não o objeto em si.
321
+
Objetos são atribuídos e copiados por referência. Em outras palavras, uma variável armazena não o "valor do objeto", mas uma "referência" (endereço em memória) para o valor. Portanto, copiar a variável ou passá-la como argumento de uma função copia essa referência, não o objeto em si.
322
322
323
-
Todas as operações via referências copiadas (como adicão/remoção de propriedades) são realizadas no mesmo objeto único.
323
+
Todas as operações feitas através de referências copiadas (como adição/remoção de propriedades) são realizadas no mesmo objeto único.
324
324
325
-
Para fazer uma "cópia real" (um clone) podemos usar `Object.assign`para a chamada "cópia rasa" (objetos aninhados são copiados por referência) ou uma função `structuredClone` de "clonagem profunda" ou usar uma implementação de clonagem personalizada, como [\_.cloneDeep(obj)](https://lodash.com/docs#cloneDeep).
325
+
Para fazer uma "cópia real" (um clone) podemos usar `Object.assign`caracterizando a chamada "cópia rasa" (objetos aninhados são copiados por referência) ou uma função `structuredClone` de "clonagem profunda" ou usar uma implementação de clonagem personalizada, como [\_.cloneDeep(obj)](https://lodash.com/docs#cloneDeep).
0 commit comments