4 respostas

★ Melhor resposta

O problema geralmente não está no ===, mas em caracteres ocultos como espaços, quebras de linha ou normalizações Unicode diferentes, que não são visíveis no debugger. Tenta aplicar `.trim()` em ambas as strings e confere o `.length` - se forem diferentes, já encontraste o teu problema. Se isso não ajudar, podes usar `.charCodeAt()` para verificar cada caractere individualmente, ou exibir as strings no console com `console.log()`, copiar e colar para garantir que realmente não há nada escondido.

WO wolf95 DE 📗 Estudante 💬 19 respostas ⚑

`===` em JavaScript compara a referência, não o conteúdo - se as strings vêm de fontes diferentes (por exemplo, uma de um campo de input, a outra de uma API), podem estar em posições diferentes na memória e `===` retorna false. Também caracteres invisíveis como espaços, quebras de linha ou caracteres Unicode especiais podem fazer com que duas strings opticamente idênticas não sejam iguais.

O que você quer fazer especificamente - está comparando inputs, respostas de API ou outra coisa? Primeiro eu checaria o tamanho dos dois strings com `console.log(str1.length, str2.length)` e depois com `console.log([...str1])` ou `JSON.stringify()` dava uma olhada se tem caracteres escondidos aí. Às vezes `str1.trim()` ajuda se o problema é espaço em branco, ou `str1.toLowerCase()` se a diferença é maiúscula/minúscula.

Se os strings são realmente idênticos e `===` não funciona mesmo assim (o que na verdade não deveria acontecer), aí me diz como você está criando ou carregando os valores especificamente - aí a gente consegue investigar mais a fundo. Algumas APIs também retornam strings com codificação estranha ou são strings numéricas em vez de strings de verdade (`"123"` vs `123`).

Anna asker Estou comparando entradas de campos de input com valores de uma API que carrego. Vou testar os verificadores de comprimento diretamente! 🎣

Tenta usar `trim()` se as strings vêm de campos de entrada ou APIs - aí costumam se esconder espaços em branco invisíveis no começo ou no final, que o debugger não mostra direito. Também quebras de linha diferentes (`\n` vs. `\r\n`) podem ser o problema, principalmente se os dados vêm de sistemas diferentes. Se isso não funcionar, você poderia exibir as duas strings com `console.log()` como JSON (ou seja, `console.log(JSON.stringify(string1))`) - aí você vê com certeza cada caractere individual e acha rápido onde estão as diferenças.

Já tropecei nisso várias vezes e posso te dizer: raramente é culpa do `===` em si. As outras respostas falam de referências, mas com strings não é bem isso - JavaScript internaliza strings e `===` funciona de forma confiável. O problema real são caracteres ocultos que o debugger simplesmente não mostra.

Minha dica: testa `string1.charCodeAt(0)` e `string2.charCodeAt(0)` no console e compara as sequências de números. Assim vê logo se tem algum caractere Unicode estranho aí. E sim, `trim()` é realmente a solução na maioria das vezes - especialmente com campos de input ou respostas de API, sempre tem espaço em branco, quebras de linha ou até caracteres nulos escondidos. `toLowerCase()` também pode ajudar se a diferença é de maiúsculas/minúsculas e você passou batido.

Se nada disso funcionar, verifica os comprimentos com `string1.length` vs `string2.length`. Se forem diferentes, já sabe que tem algo escondido. E se os dois strings forem realmente idênticos (mesmo com `charCodeAt`), podem vir de tipos de dados diferentes - tenta verificar com `typeof`.

Sua resposta

Entrarpara responder.