Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Diferenças Entre Assign e Spread

Olá!

Fiz um teste unindo os dois objetos do primeiro exemplo utilizando o operador spread e o método assign. O resultado mostrado no console aparentemente é igual. Porém, ao compará-los utilizando o operador === obtive o retorno false.

Qual seria(m) a(s) diferença(s) entre os dois métodos?

const fichaGuerreiro = {
    nome: "Aragorn",
    classe: "guerreiro"
}

const equipoGuerreiro = {
    espada: "Andúril",
    capa: "capa élfica +2"
}

const guerreiro1 = Object.assign({}, fichaGuerreiro, equipoGuerreiro);
const guerreiro2 = {...fichaGuerreiro, ...equipoGuerreiro};

console.log(guerreiro1);
console.log(guerreiro2);
console.log(guerreiro1 === guerreiro2);

Resultado no console:

{ nome: 'Aragorn', classe: 'guerreiro', espada: 'Andúril', capa: 'capa élfica +2' } { nome: 'Aragorn', classe: 'guerreiro', espada: 'Andúril', capa: 'capa élfica +2' } false

Obrigado!!

1 resposta
solução!

Olá, Gabriel. Tudo bem?

A diferença entre Object.assign e o operador de spread (...) está no modo como eles criam os objetos resultantes. Ambos copiam as propriedades dos objetos, mas mesmo que o conteúdo seja idêntico, eles criam objetos diferentes na memória. É por isso que a comparação guerreiro1 === guerreiro2 retorna false.

Quando usamos === em JavaScript, estamos comparando referências de memória, não apenas o conteúdo dos objetos. Ou seja, guerreiro1 e guerreiro2 são dois objetos distintos, mesmo que tenham as mesmas propriedades e valores.

Aqui vai um exemplo simplificado:

const obj1 = { a: 1 };
const obj2 = { a: 1 };
console.log(obj1 === obj2); // false, pois são objetos diferentes na memória

Embora ambos os objetos tenham o mesmo valor, eles ocupam posições diferentes na memória.

Qualquer dúvida, o fórum está à disposição! Bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!