Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

264
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda