Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

254
Vistas
La modificación de una copia de un objeto de JavaScript hace que el objeto original cambie

estoy copiando objA a objB

 const objA = { prop: 1 }, const objB = objA; objB.prop = 2; console.log(objA.prop); // logs 2 instead of 1

mismo problema para Arrays

 const arrA = [1, 2, 3], const arrB = arrA; arrB.push(4); console.log(arrA.length); // `arrA` has 4 elements instead of 3.
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Está claro que tiene algunos conceptos erróneos sobre lo que significa la instrucción var tempMyObj = myObj; hace.

En JavaScript, los objetos se pasan y se asignan por referencia (más precisamente, el valor de una referencia), por lo que tempMyObj y myObj son ambas referencias al mismo objeto.

Aquí hay una ilustración simplificada que puede ayudarlo a visualizar lo que está sucediendo.

 // [Object1]<--------- myObj var tempMyObj = myObj; // [Object1]<--------- myObj // ^ // | // ----------- tempMyObj

Como puede ver después de la asignación, ambas referencias apuntan al mismo objeto.

Necesita crear una copia si necesita modificar uno y no el otro.

 // [Object1]<--------- myObj const tempMyObj = Object.assign({}, myObj); // [Object1]<--------- myObj // [Object2]<--------- tempMyObj

Respuesta antigua:

Aquí hay un par de otras formas de crear una copia de un objeto.

Como ya estás usando jQuery:

 var newObject = jQuery.extend(true, {}, myObj);

Con vainilla JavaScript

 function clone(obj) { if (null == obj || "object" != typeof obj) return obj; var copy = obj.constructor(); for (var attr in obj) { if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr]; } return copy; } var newObject = clone(myObj);

Ver aquí y aquí

over 4 years ago · Santiago Trujillo Denunciar

0

objeto de clonación profunda con JSON.parse() y JSON.stringify

 // Deep Clone obj = { a: 0 , b: { c: 0}}; let deepClone = JSON.parse(JSON.stringify(obj));

referencia: este artículo

Mejor referencia : este artículo

over 4 years ago · Santiago Trujillo Denunciar

0

Para resumir todo, y como aclaración, hay tres formas de copiar un objeto JS.

  1. Una copia normal . Cuando cambia las propiedades del objeto original, las propiedades del objeto copiado también cambiarán (y viceversa).
 const a = { x: 0} const b = a; bx = 1; // also updates ax
  1. Una copia superficial . Las propiedades de nivel superior serán únicas para el objeto original y el copiado. Sin embargo, las propiedades anidadas se compartirán entre ambos objetos. Usa el operador de propagación ...{} u Object.assign() .
 const a = { x: 0, y: { z: 0 } }; const b = {...a}; // or const b = Object.assign({}, a); bx = 1; // doesn't update ax byz = 1; // also updates ayz
  1. Una copia profunda . Todas las propiedades son únicas para el objeto original y las copias, incluso las propiedades anidadas. Para una copia profunda, serialice el objeto en JSON y vuelva a analizarlo en un objeto JS.
 const a = { x: 0, y: { z: 0 } }; const b = JSON.parse(JSON.stringify(a)); byz = 1; // doesn't update ayz
  1. El uso Object.create() crea un nuevo objeto. Las propiedades se comparten entre los objetos (cambiando uno también cambia el otro). La diferencia con una copia normal es que las propiedades se agregan bajo el prototipo __proto__ del nuevo objeto. Cuando nunca cambia el objeto original, esto también podría funcionar como una copia superficial, pero sugeriría usar uno de los métodos anteriores, a menos que necesite específicamente este comportamiento.
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda