Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Muita gente acha que pode usar == ou === pra comparar objetos em JS, mas isso é um erro clássico. Esses operadores só verificam se a referência é igual, não o conteúdo.
Para comparar dois objetos realmente, tem que fazer uma verificação profunda — conferir se todas as chaves e valores batem. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Uma solução simples e prática é criar uma função que verifica cada propriedade recursivamente, sem precisar de libs externas. Assim, você garante que os objetos são iguais de conteúdo, não só de referência. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
function deepEqual(obj1, obj2) {
if (obj1 === obj2) return true. if (typeof obj1 !== 'object' || typeof obj2 !== 'object' || obj1 == null || obj2 == null) return false. const keys1 = Object.keys(obj1). const keys2 = Object.keys(obj2). if (keys1.length !== keys2.length) return false. for (let key of keys1) {
if (!keys2.includes(key) || !deepEqual(obj1[key], obj2[key])) return false. }
return true. }
Isso ajuda pra cacete na hora de validar configurações ou dados de resposta, por exemplo. Dá pra usar direto, funciona bem. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Quem aí já precisou fazer isso? Como costuma resolver na sua rotina?
concordo, esse comentário. pra casos mais complexos, prefiro validar só as chaves principais ou fazer uma serialização com JSON.stringify e comparar, embora não seja perfeito. no meu time, às vezes a gente faz isso pra acelerar os testes.
massa, essa função funciona bem pra objetos pequenos, mas já passei perrengue com objetos grandes ou aninhados profundos. às vezes o desempenho pesa na hora de validar muitas estruturas.
hum, interessante essa abordagem. mas e se os objetos tiverem funções ou propriedades não enumeráveis? aí a comparação pode passar batido. às vezes, acho que o melhor mesmo é pensar na validação de uma forma mais contextual.