Object.assign () modifica sus parámetros? [duplicar]

Oct 26 2020

No estoy seguro de por qué se modifica el valor de 'datos' en el test.jsarchivo.

// 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}

No pude reproducirlo en codepen, pero aquí hay un repositorio: https://github.com/bmichalowski/shards ruta al archivo: ./src/stories/PropsBug

No creo que una reacción o un libro de cuentos tengan nada que ver con eso, así que no lo etiqueto.

Editar:

En este jsfiddle, el comportamiento es el esperado. https://jsfiddle.net/83xsdomb/Sin embargo, mi código tiene un orden diferente. ¿Por qué se datemodifica la visualización cuando se modifica teóricamente después de visualizarla?

Respuestas

1 AyushGupta Oct 26 2020 at 01:32

Según los documentos :

El método Object.assign () copia todas las propiedades propias enumerables de uno o más objetos de origen a un objeto de destino. Devuelve el objeto de destino.

Las propiedades del objeto de destino se sobrescriben con las propiedades de las fuentes si tienen la misma clave. Las propiedades de las fuentes posteriores sobrescriben a las anteriores.

Básicamente, modifica el primer objeto que se le pasa y devuelve el mismo objeto.

Puede evitar esto pasando {}como primer parámetro.

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