Sitemap
Gutu Galuppo

Gutu Galuppo

JSON.parse(JSON.stringify()) VS structuredClone()

3 min readFeb 19, 2026

--

A forma certa (e a forma gambiarra) de clonar objetos em JavaScript

Se você já precisou clonar um objeto em JavaScript, provavelmente fez isso:

const clone = JSON.parse(JSON.stringify(obj));

E sentiu aquele orgulho momentâneo de hacker raiz. Mas… você também provavelmente já quebrou algo sem entender o porquê. Estou errado?

Hoje vamos comparar:

  • JSON.parse(JSON.stringify())
  • structuredClone()

E entender quando usar, quando evitar e por que você talvez esteja perdendo dados sem perceber.

O Problema: Clonagem Profunda (Deep Clone)

Em JavaScript, copiar objetos não é tão simples quanto parece.

const user = { name: "Ana" };
const copy = user;

copy.name = "Carlos";
console.log(user.name); // "Carlos"

Isso acontece porque objetos são copiados por referência. Se queremos uma cópia real, precisamos de um deep clone.

A Gambiarra Clássica

const clone = JSON.parse(JSON.stringify(obj));

Ela funciona… às vezes 😅

Como isso funciona?

  1. Converte o objeto para string
  2. Converte a string de volta para objeto

Simples. Inteligente. Mas cheio de pegadinhas.

🔥 O Problema Real

Veja esse exemplo:

const obj = {
name: "Lucas",
age: 30,
birth: new Date(),
greet() { console.log("Hello") },
undef: undefined
};

const clone = JSON.parse(JSON.stringify(obj));
console.log(clone);

Resultado?

{
name: "Lucas",
age: 30,
birth: "2026-02-19T00:00:00.000Z"
}

💀 O que sumiu?

  • ❌ Funções
  • ❌ undefined
  • ❌ Date virou string
  • ❌ Map, Set, BigInt, RegExp… tudo quebrado

structuredClone() — O Jeito Moderno

Agora olha isso:

const clone = structuredClone(obj);

Só isso.

Get Gutu Galuppo’s stories in your inbox

Join Medium for free to get updates from this writer.

Sem parse.
Sem stringify.
Sem trauma.

O que ele suporta?

const obj = {
date: new Date(),
map: new Map([["a", 1]]),
set: new Set([1,2,3]),
nested: { value: 42 }
};

const clone = structuredClone(obj);
console.log(clone);

Resultado no console:

{
date: 2026-02-19T12:34:56.789Z,
map: Map(1) { 'a' => 1 },
set: Set(3) { 1, 2, 3 },
nested: { value: 42 }
}

👉 Observações:

  • date continua sendo um objeto Date
  • map continua sendo Map
  • set continua sendo Set
  • nested permanece intacto

Ou seja… nada virou string, nada sumiu, nada foi sacrificado no altar do JSON.stringify() 😌

⚡ O que ele NÃO suporta?

  • ❌ Funções
  • ❌ DOM Nodes
  • ❌ Algumas instâncias customizadas complexas

Mas atenção: isso é intencional. structuredClone é baseado no Structured Clone Algorithm, usado internamente pelo browser (postMessage, IndexedDB etc).

Comparação Direta

Press enter or click to view image in full size

Você pode testar isso direto no console do navegador:

const complexObject = {
name: "Test",
date: new Date(),
map: new Map([["key", "value"]]),
set: new Set([1, 2, 3]),
nested: {
arr: [1, 2, 3]
}
};

console.log("JSON clone:");
console.log(JSON.parse(JSON.stringify(complexObject)));
console.log("structuredClone:");
console.log(structuredClone(complexObject));

Compare os resultados e observe a diferença.

Performance: Vale a Pena Trocar?

Sim.

Além de mais correto, structuredClone():

  • É mais seguro
  • É mais expressivo
  • Evita bugs silenciosos
  • Funciona com tipos modernos

Ele já é suportado em:

  • Chrome 98+
  • Node 17+
  • Firefox moderno
  • Edge moderno

Se você ainda precisa suportar ambientes antigos, aí sim talvez precise de fallback.

Quando Ainda Usar JSON.parse(JSON.stringify())?

Sinceramente?

Quase nunca.

Talvez apenas se:

  • Você tem 100% certeza que o objeto é simples (POJO puro)
  • Não tem Date, Map, Set, BigInt, undefined
  • Você está em ambiente muito antigo

Mas hoje em dia, isso é cada vez mais raro.

Conclusão

JSON.parse(JSON.stringify()) foi uma solução criativa.

Mas structuredClone() é a solução correta.

É como comparar:

Fita isolante VS Ferramenta apropriada

Funciona? Funciona.
Mas você quer algo que não quebre no futuro.

Se você gostou desse tipo de conteúdo direto ao ponto e com exemplos reais, salve esse artigo e compartilhe com aquele amigo que ainda clona objeto com JSON hack

--

--