美丽的人,美丽?
今天,我将通过JavaScript参考来解释一些有关归因的信息,以及它的工作原理以及它产生的问题以及如何解决。
它是通过引用归因的?
当我们在JS中创建一个差异并将值归因于其值时,值的类型确定它是通过值还是通过参考进行分配。
但是,您问我将通过参考来归因。良好的是,当用该值创建内存中的空间的发明时,我们仅在原始方差的内存中解决相同地址的新差异。就像指针作品一样,por©m,没有像在C中那样操纵地址。
在每种类型的职责工作列表下方:
按值:
- 未定义
- null
- 数字
- 字符串
- 符号
翻滚:
- 对象
让我们举例说明
让我们看看下面的示例,我们使用koud1和koud2属性创建了一个pessoa
对象,以及该对象的基础,我们创建了另一个称为koud3的对象,仅将其归因于pessoa
对象,然后将outraPessoa
对象的年龄修改为30我们在每个对象中给出一个台。
// Objeto original
const pessoa = { nome: "João", idade: 25 };
// Atribuição por referência
const outraPessoa = pessoa;
// Modificando a propriedade do objeto
outraPessoa.idade = 30;
console.log(pessoa.idade); // Saída esperada: 25, Saída real: 30
console.log(outraPessoa.idade); // Saída: 30
我们可以在上面的示例中看到,当我们更改koud3对象中的年龄属性的值,然后在屏幕上显示pessoa
对象的值也更改。好吧,如果您了解那里的参考概念,也许您一定已经了解了为什么会发生。如果我解释。良好的基本上,可变outraPessoa
也指向与差异pessoa
相同的纪念地址,一旦一个更改为另一个。
如何避免这种问题?
有一些方法可以解决这种情况并获得预期的结果:
- mâ©todo object.assign
您可以使用母亲©所有Object.assign
创建一个新对象,如下示例:
// Objeto original
const pessoa = { nome: "Maria", idade: 30 };
// Clonando o objeto
const pessoa1 = Object.assign({}, pessoa)
// Modificando a propriedade do clone
pessoa1.idade = 35;
console.log(pessoa.idade); // Saída: 30
console.log(pessoa1.idade); // Saída: 35
- 传播
您还可以使用差异操作员或扩展来创建一个新对象,如下示例:
// Objeto original
const pessoa = { nome: "Maria", idade: 30 };
// Clonando o objeto
const clonePessoa = { ...pessoa };
// Modificando a propriedade do clone
clonePessoa.idade = 35;
console.log(pessoa.idade); // Saída: 30
console.log(clonePessoa.idade); // Saída: 35
- json.stringfy
这远非是情况的最佳解决方案之一,但是我已经看到和工作了。它包括将对象再次传递给对象并输入方差后,将对象转换为字符串,如下示例:
// Objeto original
const pessoa = { nome: "Maria", idade: 30 };
// Clonando o objeto
const clonePessoa = JSON.parse(JSON.stringify(pessoa));
// Modificando a propriedade do clone
clonePessoa.idade = 35;
console.log(pessoa.idade); // Saída: 30
console.log(clonePessoa.idade); // Saída: 35
我希望我能帮助解决并了解有关JavaScript的工作原理的更多信息。在下面,我将留下一些可能很有趣的链接。
链接
Valores Primitivos e Valores de Referência no JavaScript by Ricardo Reis
Armazenando as informações que você precisa — Variáveis
如果您到达这里©,请在redes vizinhas.中关注我