Object.assign () modifica seus parâmetros? [duplicado]

Oct 26 2020

Não sei por que o valor de 'dados' está sendo modificado no test.jsarquivo.

// data.js
export default {
a: 1,
b: 2,
c: 3,
};

// test.js

import data from "./data";

console.log({ data }); // {a:1,b:2,c:4}
const modif1 = Object.assign(data, { c: 4 }); 
console.log({ modif1 }); // {a:1,b:2,c:4}

Não consegui reproduzi-lo no codepen, mas aqui está um repo: https://github.com/bmichalowski/shards caminho para o arquivo: ./src/stories/PropsBug

Eu não acho que uma reação ou livro de histórias tenha algo a ver com isso, então eu não o etiquetei.

Editar:

Neste jsfiddle, o comportamento é o esperado. https://jsfiddle.net/83xsdomb/No entanto, meu código tem uma ordem diferente. Por que o dateexibido é modificado quando é teoricamente modificado depois de ser exibido?

Respostas

1 AyushGupta Oct 26 2020 at 01:32

De acordo com os documentos :

O método Object.assign () copia todas as propriedades próprias enumeráveis ​​de um ou mais objetos de origem para um objeto de destino. Ele retorna o objeto de destino.

As propriedades no objeto de destino são substituídas por propriedades nas origens se elas tiverem a mesma chave. As propriedades das fontes posteriores sobrescrevem as anteriores.

Basicamente, ele modifica o primeiro objeto passado a ele e retorna o mesmo objeto.

Você pode evitar isso passando {}como o primeiro parâmetro.

const data = { a: 1, b: 2, c: 3}
const modif1 = Object.assign({}, data, { c: 4 }); 
console.log(data);
console.log(modif1);