4 réponses

★ Meilleure réponse

Le problème vient généralement pas de ===, mais de caractères cachés comme des espaces, des sauts de ligne ou des normalisations Unicode différentes, qui ne sont pas visibles dans le débogueur. Essaye d'appliquer `.trim()` sur les deux chaînes et jette un œil à leur `.length` - si elles sont différentes, tu as trouvé ton problème. Si ça ne marche pas, tu peux vérifier chaque caractère avec `.charCodeAt()` ou afficher les chaînes dans la console avec `console.log()` et les copier pour te assurer qu'il n'y a vraiment rien de caché.

En JavaScript, `===` compare la référence, pas le contenu - si les strings viennent de sources différentes (par exemple l'un d'un champ de saisie, l'autre d'une API), ils peuvent avoir des emplacements mémoire différents et `===` retourne false. Des caractères invisibles comme des espaces, des sauts de ligne ou des caractères Unicode spéciaux peuvent aussi faire que deux strings optiquement identiques ne soient pas égaux.

Qu'est-ce que tu veux faire concrètement - tu compares des saisies utilisateur, des réponses d'API ou quelque chose d'autre? D'abord, je vérifierais la longueur des deux strings avec `console.log(str1.length, str2.length)` et ensuite avec `console.log([...str1])` ou `JSON.stringify()` pour voir s'il y a des caractères cachés dedans. Parfois `str1.trim()` aide aussi si c'est une question d'espaces blancs, ou `str1.toLowerCase()` si la casse est le problème.

Si les strings sont vraiment identiques et que `===` ne fonctionne quand même pas (ce qui ne devrait pas arriver en fait), dis-moi comment tu crées ou charges concrètement les valeurs - on pourra creuser davantage. Certaines APIs retournent aussi des strings bizarrement encodées ou ce sont des strings de chiffres au lieu de vrais strings (`"123"` vs `123`).

Anna asker Je compare les entrées des champs de saisie avec les valeurs d'une API que je charge. Je vais essayer les vérifications de longueur directement ! 🎣

Essaie `trim()` si les chaînes proviennent de champs de saisie ou d'APIs - les espaces invisibles au début ou à la fin s'y cachent souvent, et le débogueur ne te les montre pas clairement. Les sauts de ligne différents (`\n` vs. `\r\n`) peuvent aussi être le problème, surtout si les données viennent de systèmes différents. Si ça ne suffit pas, tu pourrais afficher les deux chaînes avec `console.log()` en JSON (donc `console.log(JSON.stringify(string1))`) - tu verras alors chaque caractère avec certitude et tu trouveras vite où sont les différences.

Je suis tombée là-dessus plusieurs fois et je peux te dire : c'est rarement vraiment un problème avec `===` en lui-même. Les autres réponses parlent de références, mais pour les strings, ce n'est pas vraiment le sujet - JavaScript interne les strings et `===` fonctionne de manière fiable. Le vrai problème, ce sont les caractères cachés que le débogueur ne t'affiche simplement pas.

Mon conseil : essaie `string1.charCodeAt(0)` et `string2.charCodeAt(0)` dans la console et compare les séquences de nombres. Tu veras tout de suite s'il y a des caractères Unicode bizarres dedans. Et oui, `trim()` est vraiment souvent la solution - surtout avec les champs d'entrée ou les réponses API, des espaces, des retours à la ligne ou même des caractères nuls s'y cachent. `toLowerCase()` peut aussi aider si la casse est différente et que tu l'as oublié.

Si rien de tout ça ne marche, vérifie les longueurs avec `string1.length` vs `string2.length`. Si elles sont différentes, tu sais tout de suite qu'il y a quelque chose de caché. Et si les deux strings sont vraiment identiques (même avec `charCodeAt`), il se peut qu'ils viennent de types de données différents - essaie de vérifier avec `typeof`.

Votre réponse

Se connecterpour répondre.