2017-01-26 5 views
0

J'ai un formulaire de contact. Et j'utilise js pour la validation de champ de formulaire:Comparaison d'égalité stricte

if(email.length == 0 || email.indexOf('@') == '-1'){ 
    var error = true; 
} 

mais je veux utiliser la comparaison d'égalité stricte pour de meilleures performances. Donc, j'essaie

if(email.length === 0 || email.indexOf('@') === '-1'){ 
     var error = true; 
    } 

mais cela ne fonctionne pas.

Répondre

4

Pour une égalité stricte, La valeur doit être égale et le type doit être identique. Selon votre code le '-1' est de type string mais indexOf renvoie un number. L'opérateur === ne fait pas la conversion, donc même si les valeurs sont égales mais ne sont pas du même type === retournera simplement false.

Vous pouvez essayer de trouver le type à l'aide de l'opérateur typeof.

Donc, si vous essayez typeof '-1' il retournerait « string » et
typeof 'email.indexOf('@') retournerait « nombre »

Ainsi, la bonne façon de faire est d'enlever la citation autour du numéro -1 comme indiqué ci-dessous.

if(email.length === 0 || email.indexOf('@') === -1){ 
      var error = true; 
     } 

De MDN

stricte égalité compare deux valeurs pour l'égalité. Aucune de ces valeurs n'est convertie implicitement en une autre valeur avant d'être comparée. Si les valeurs ont des types différents, les valeurs sont considérées comme inégales. Sinon, si les valeurs ont le même type et ne sont pas des nombres, ils sont considérés comme égaux s'ils ont la même valeur. Enfin, si les deux valeurs sont des nombres, ils sont considérés égaux s'ils ne sont pas tous les deux NaN et ont la même valeur, ou si l'un est +0 et l'autre est -0.

0

L'opérateur Comparaison Identity/Strict Equality (===)ne convertit pas les types. C'est ce qui le sépare de l'égalité régulière. .indexOf() renverra un nombre, qui n'est (évidemment) pas le même que la chaîne -1. Théoriquement, vous pourriez en lancer un à l'autre, mais la meilleure approche serait simplement d'inclure le nombre, comme suit:

if (email.length == 0 || email.indexOf('@') == -1) { 
    ... Your Code Here... 
}