Question Quelle est la bonne façon de vérifier l'égalité des chaînes dans JavaScript?


Quelle est la bonne façon de vérifier l'égalité entre les chaînes de JavaScript?


603
2017-08-27 17:37


origine


Réponses:


toujours Jusqu'à ce que vous compreniez pleinement les différences et les implications de l'utilisation du == et === opérateurs, utilisez le === opérateur car cela vous évitera des bogues obscurs (non-évidents) et des WTF. Le "régulier" == l'opérateur peut avoir des résultats très inattendus en raison de la coercition de type interne, donc en utilisant === est toujours l'approche recommandée.

Pour un aperçu de cela, et d'autres parties "bonnes ou mauvaises" de Javascript lire sur M. Douglas Crockford et son travail. Il y a un excellent Google Tech Talk où il résume beaucoup de bonnes infos: http://www.youtube.com/watch?v=hQVTIJBZook


Mettre à jour:

le Vous ne connaissez pas JS La série de Kyle Simpson est excellente (et libre de lire en ligne). La série va dans les zones les plus mal comprises de la langue et explique les «mauvaises parties» que Crockford vous suggère d'éviter. En les comprenant, vous pouvez en faire bon usage et éviter les pièges.

Le "Up & Going"livre comprend une section sur Égalité, avec ce résumé spécifique de quand utiliser le lâche (==) vs strict (===) les opérateurs:

Pour résumer un tas de détails à quelques plats à emporter simples, et vous aider à savoir si utiliser == ou === dans diverses situations, voici mes règles simples:

  • Si l'une ou l'autre valeur (côté alias) dans une comparaison pourrait être le true ou false valeur, éviter == et utilise ===.
  • Si l'une ou l'autre valeur dans une comparaison peut être de ces valeurs spécifiques (0, "", ou [] - tableau vide), éviter == et utilise ===.
  • Dans tout d'autres cas, vous êtes sûr d'utiliser ==. Non seulement c'est sûr, mais dans de nombreux cas, il simplifie votre code d'une manière qui améliore la lisibilité.

Je recommande toujours le discours de Crockford pour les développeurs qui ne veulent pas investir le temps de vraiment comprendre le Javascript. C'est un bon conseil pour un développeur qui ne travaille que rarement en Javascript.


475
2017-08-27 17:39



Si vous savez que ce sont des chaînes, il n'est pas nécessaire de vérifier le type.

"a" == "b"

Notez cependant que les objets chaîne ne seront pas égaux.

new String("a") == new String("a")

retournera faux.

Appelez la méthode valueOf () pour la convertir en primitive pour les objets String,

new String("a").valueOf() == new String("a").valueOf()

retournera vrai


153
2017-08-27 17:40



Juste une addition aux réponses: Si toutes ces méthodes retournent false, même si les chaînes semblent être égales, il est possible qu'il y ait un espace à gauche et / ou à droite d'une chaîne. Alors, mettez juste un .trim() à la fin des chaînes avant de comparer:

if(s1.trim() === s2.trim())
{
    // your code
}

J'ai perdu des heures à essayer de comprendre ce qui ne va pas. J'espère que cela aidera quelqu'un!


31
2018-05-02 13:41



Sauf si vous savez vraiment comment fonctionne la coercition, vous devriez éviter == et utiliser l'opérateur d'identité === au lieu. Mais tu devrais lisez ceci pour comprendre comment cela fonctionne.

Si tu utilises ==, vous laissez la langue faire une sorte de coercition pour vous, par exemple:

"1" == 1 // true
"0" == false // true
[] == false // true

Comme Douglas Crockford l'a dit dans son livre:

Il est toujours préférable d'utiliser l'opérateur d'identité.


10
2017-10-22 03:49



Il existe en fait deux façons de faire des chaînes en javascript.

  1. var str = 'Javascript'; Cela crée une valeur de chaîne primitive.

  2. var obj = new String('Javascript'); Cela crée un objet wrapper de type String.

    typeof str // string
    typeof obj // object

Donc, la meilleure façon de vérifier l'égalité est d'utiliser le === opérateur car il vérifie la valeur ainsi que le type des deux opérandes.

Si vous voulez vérifier l'égalité entre deux objets, en utilisant String.prototype.valueOf est la bonne façon.

new String('javascript').valueOf() == new String('javascript').valueOf()

7
2018-05-02 19:11



ce qui m'a conduit à cette question est la padding et white-spaces 

vérifier mon cas

 if (title === "this word")
      doSomething();

et le titre était " this word"

enter image description here

alors peut-être que vous devez utiliser trim fonctionne comme ça

var title = $(this).text().trim();

7
2017-07-27 10:52



Chaîne Objects peut être vérifié en utilisant ce hack JSON.stringyfy() 

var me = new String("me");
var you = new String("me");
var isEquel = JSON.stringify(me) === JSON.stringify(you);
console.log(isEquel);


0
2017-07-04 12:33