without objeto objects clonar array javascript object deep-copy shallow-copy

javascript - objeto - object.assign typescript



JS: ¿Object.assign() crea una copia profunda o una copia superficial? (4)

Acabo de encontrar este concepto de

var copy = Object.assign({}, originalObject);

que crea una copia del objeto original en el objeto " copy ". Sin embargo, mi pregunta es, ¿esta forma de clonar un objeto crea una copia profunda o una copia superficial?

PD: La confusión es que si crea una copia profunda, entonces sería la forma más fácil de clonar un objeto.


Al usar Object.assign() , en realidad estás haciendo una Copia superficial de tu objeto. Cada vez que hacemos una operación como asignar un objeto a otro, en realidad realizamos una copia superficial, es decir, si OBJ1 es un objeto, modificarlo a través de otro objeto que sea OBJ2 también reflejará los cambios en OBJ1.


Crea una copia superficial, de acuerdo con este párrafo de MDN :

Para la clonación profunda, necesitamos usar otras alternativas porque Object.assign () copia los valores de propiedad. Si el valor de origen es una referencia a un objeto, solo copia ese valor de referencia.

Para los propósitos de redux, Object.assign() es suficiente porque el estado de una aplicación redux solo contiene valores inmutables (JSON).


Olvídese de la copia profunda, incluso la copia superficial no es segura, si el objeto que está copiando tiene una propiedad con un atributo enumerable establecido en falso.

MDN:

El método Object.assign () solo copia propiedades enumerables y propias de un objeto de origen a un objeto de destino

toma este ejemplo

var o = {}; Object.defineProperty(o,''x'',{enumerable: false,value : 15}); var ob={}; Object.assign(ob,o); console.log(o.x); // 15 console.log(ob.x); // undefined


Para Data structures pequeñas, veo que JSON.stringify() y JSON.parse() funcionan bien.

// store as JSON var copyOfWindowLocation = JSON.stringify(window.location) console.log("JSON structure - copy:", copyOfWindowLocation) // convert back to Javascript Object copyOfWindowLocation = JSON.parse(copyOfWindowLocation) console.log("Javascript structure - copy:", copyOfWindowLocation)