4 risposte

★ Miglior risposta

Il problema di solito non sta in `===`, ma in caratteri nascosti come spazi, a capo o diverse normalizzazioni Unicode che non sono visibili nel debugger. Prova ad applicare `.trim()` a entrambe le stringhe e controlla la `.length` - se sono diverse, hai trovato il tuo problema. Se non funziona, puoi controllare ogni singolo carattere con `.charCodeAt()` oppure stampare le stringhe nella console con `console.log()` e copiarle, per assicurarti che davvero non c'è niente di nascosto.

WO wolf95 DE 📗 Studente 💬 19 risposte ⚑

In JavaScript === confronta il riferimento, non il contenuto - se le stringhe provengono da fonti diverse (ad esempio una da un campo input, l'altra da un'API), possono trovarsi in locazioni di memoria differenti e === restituisce false. Anche caratteri invisibili come spazi, a capo o caratteri Unicode speciali possono fare in modo che due stringhe otticamente identiche non siano uguali.

Cosa vuoi fare concretamente - stai confrontando input, API response o qualcos'altro? Per prima cosa controllerei la lunghezza di entrambe le stringhe con `console.log(str1.length, str2.length)` e poi vedrei con `console.log([...str1])` oppure `JSON.stringify()` se ci sono caratteri nascosti dentro. A volte aiuta anche `str1.trim()` se il problema sono gli spazi bianchi, oppure `str1.toLowerCase()` se il problema è la differenza maiuscole/minuscole.

Se le stringhe sono davvero identiche e === comunque non funziona (cosa che in realtà non dovrebbe succedere), allora dimmi come crei o carichi concretamente i valori - così possiamo approfondire. Alcune API restituiscono stringhe codificate in modo strano oppure sono stringhe numeriche invece di stringhe vere (`"123"` vs `123`).

Anna asker Confronto gli input dai campi di input con i valori da un'API che carico. Proverò direttamente i controlli sulla lunghezza! 🎣

Prova `trim()` nel caso i String provengono da campi di input o API - lì si nascondono volentieri spazi invisibili all'inizio o alla fine, che il debugger non ti mostra chiaramente. Anche interruzioni di riga diverse (`\n` vs. `\r\n`) possono essere il problema, soprattutto se i dati provengono da sistemi diversi. Se questo non aiuta, potresti stampare i due String con `console.log()` come JSON (quindi `console.log(JSON.stringify(string1))`) - allora vedrai garantitamente ogni singolo carattere e troverai rapidamente dove sono le differenze.

Ci sono già cascato parecchie volte e posso dirti: raramente è un problema vero di `===` in sé. Le altre risposte parlano di riferimenti, ma con le stringhe non è questo il punto - JavaScript internalizza le stringhe e `===` funziona affidabilmente. Il vero problema sono caratteri nascosti che il debugger semplicemente non ti mostra.

Mio consiglio: prova a mettere `string1.charCodeAt(0)` e `string2.charCodeAt(0)` nella console e confronta le sequenze di numeri. Così vedi subito se ci sono caratteri Unicode strani. E sì, `trim()` è davvero spesso la soluzione - soprattutto con i campi di input o le risposte API si nascondono spazi, interruzioni di riga o persino caratteri nulli. Anche `toLowerCase()` può aiutare se la capitalizzazione è diversa e te l'eri perso.

Se niente di tutto questo funziona, controlla le lunghezze con `string1.length` vs `string2.length`. Se sono diverse, sai subito che c'è qualcosa di nascosto. E se entrambe le stringhe sono davvero identiche (anche con `charCodeAt`), potrebbero provenire da tipi di dati diversi - prova a controllare con `typeof`.

La tua risposta

Accediper rispondere.