JavaScript opérateurs de comparaison: l'Identité contre l'Égalité
J'ai essayé de comprendre la différence entre le JavaScript, les opérateurs de comparaison suivants: l'identité et de l'égalité. De ce que j'ai lu, si vous vérifier l'égalité de deux objets à l'aide de ==, JavaScript, essayez de déterminer si elles sont de même type et de même, si pas, essayez de les faire de même type. Cependant, === ne se comportent pas de la même manière. Ainsi, à titre d'exemple:
var n = "1";
console.log(n==1); //outputs true
console.log(n===1); //outputs false
Quelle est donc la différence entre ces "identité" des opérateurs et des opérateurs d'égalité? Quel est l'avantage d'avoir les deux?
Sont t-il des différences dans la performance? Je pense que l'identité de l'opérateur serait plus rapide car il ne fait pas de conversion.
Aussi, comment ces différents quand il s'agit d'objets plus complexes, comme des tableaux? Le plus important, ce n'conventions de dire à propos de quand on doit être utilisé sur d'autres, pourquoi?
OriginalL'auteur Hristo | 2011-03-27
Vous devez vous connecter pour publier un commentaire.
L'opérateur d'égalité va tenter de faire les types de données de même avant de faire la comparaison. D'autre part, l'identité de l'opérateur nécessite à la fois des types de données à être le même comme une condition préalable.
Il ya tout à fait quelques posts là similaire à cette question. Voir:
Comment faire le PHP d'égalité (== égal double) et d'identité (=== triple égal) les opérateurs de comparaison diffèrent-ils? (a un beau tableau de comparaison)
Qui est égal à l'opérateur (== vs ===) devrait être utilisé en JavaScript comparaisons?
Dans la pratique, l'opérateur vient vraiment pratique quand vous voulez être certain qu'une valeur booléenne est vraie ou fausse depuis...
OriginalL'auteur Michael Copeland
La différence est que,==, <=, >= et != va faire de contrainte de type — par exemple, la force d'une chaîne à être évaluée comme un nombre. ===, <==, >== et !== ne fera pas de contrainte de type. Ils comparent une chaîne en nombre, et depuis la chaîne "1" n'est pas la même que la valeur numérique 1, le résultat est faux.
De référence est ici:
https://developer.mozilla.org/en/JavaScript/Reference/Operators/Comparison_Operators
Comme pour quand utiliser l'un; Douglas Crockford: Il est presque toujours préférable d'utiliser l' === et !== des opérateurs. L' == et != les opérateurs de faire de ce type de contrainte. En particulier, ne pas utiliser de == pour comparer falsy valeurs.
génial le lien! Merci! Cependant, il n'est pas une liste <== >==. Sont ceux légitime?
En bas, dans votre exemple, il n'est pas nécessaire, mais est-ce mal? Est-il un inconvénient à l'utilisation de === de toute façon? En dehors de cet exemple, le seul que je peux penser à est de forcer conversions explicites/coercition.
Mais '<==' et '>==' n'existent pas.
OriginalL'auteur Joel Coehoorn
==
est la même chose que===
, sauf que==
n'conversion de typePour vous montrer ce que je veux dire ici est une fonction JavaScript qui se comporte exactement comme
==
:Cette fonction devrait aider à expliquer pourquoi les gens continuent à dire que vous ne devriez pas utiliser
==
.Comme vous pouvez le voir
==
a beaucoup de logique compliquée pour la conversion de type. De ce fait, il est difficile de prédire ce résultat que vous allez obtenir, ce qui peut conduire à des bugs.Voici quelques exemples de certains des résultats que vous ne s'attendrait pas:
Vérités Inattendues
Des Conclusions Inattendues
Objets avec des Fonctions Spéciales
OriginalL'auteur Luis Perez
La raison en est que l'identité ou strictes de l'opérateur (===), il compare avec aucune conversion de type, ce qui signifie que si les deux valeurs n'ont pas la même valeur et le même type, ils ne seront pas considérées comme égales.
Plus claire explication dans le lien suivant:
https://medium.com/@ludico8/identity-vs-equality-battle-of-understanding-vs-758d396e922#.hhg396ey9
vous êtes les bienvenus @Hristo
OriginalL'auteur ludico8