toujours Jusqu'à ce que vous compreniez parfaitement les différences et les implications de l'utilisation de l'option ==
et ===
utiliser les opérateurs ===
car il vous épargnera des bogues obscurs (non évidents) et des WTF. L'opérateur "régulier" ==
peut donner des résultats très inattendus en raison de la coercition interne entre les types. ===
est toujours l'approche recommandée.
Pour en savoir plus sur ce sujet et sur d'autres aspects "bons ou mauvais" de Javascript, lisez les articles de M. Douglas Crockford et son travail. Il y a un excellent Google Tech Talk où il résume beaucoup de bonnes informations : http://www.youtube.com/watch?v=hQVTIJBZook
Mise à jour :
Le site Vous ne connaissez pas JS de Kyle Simpson est excellente (et peut être lue gratuitement en ligne). Cette série aborde les aspects les plus souvent mal compris de la langue et explique les "mauvaises parties" que Crockford vous suggère d'éviter. En les comprenant, vous pouvez les utiliser correctement et éviter les pièges.
Le " En route "Le livre comprend une section sur Égalité avec ce résumé spécifique sur le moment où il faut utiliser la loose ( ==
) contre strict ( ===
) :
Pour résumer toute une série de détails en quelques points simples à retenir et vous aider à savoir si vous devez utiliser ==
ou ===
dans diverses situations, voici mes règles simples :
- Si l'une ou l'autre valeur (alias côté) d'une comparaison peut être le
true
ou false
valeur, éviter ==
et utiliser ===
.
- Si l'une des deux valeurs d'une comparaison peut être l'une de ces valeurs spécifiques (
0
, ""
ou []
-- tableau vide), éviter ==
et utiliser ===
.
- Sur tous Dans les autres cas, vous pouvez utiliser
==
. Non seulement il est sûr, mais dans de nombreux cas, il simplifie votre code de manière à en améliorer la lisibilité.
Je continue à recommander la conférence de Crockford aux développeurs qui ne veulent pas investir le temps nécessaire pour vraiment comprendre Javascript - c'est un bon conseil pour un développeur qui ne travaille qu'occasionnellement en Javascript.
7 votes
Y a-t-il une raison de ne pas utiliser == ?
30 votes
@Kendrick -- bien sûr. Son système de coercion de type peut être incroyablement peu intuitif et peut rendre les erreurs très faciles à négliger (il regarde juste, mais peut être très erronée)
30 votes
@Kendrick - parce que
{} == "[object Object]"
évalue à true, par exemple.23 votes
Un peu ennuyeux que
String().equals()
n'est pas une méthode en JS...0 votes
@Kendrick :
$$=='function $$(selector, [startNode]) { [Command Line API] }'
est vrai, à cause de la réflexion du code JS3 votes
@AlexanderMills Pourquoi ?
1 votes
@Kendrick - oui - regardez ces photos
0 votes
Pour un peu plus de contexte, il existe plusieurs façons de créer des chaînes de caractères, et le comportement en matière d'égalité varie. Il existe des chaînes littérales comme
"this is a literal"
il y a des objets commenew String("this is an object")
et il y a leString()
qui effectue la conversionString(something)
. En général, les littéraux de chaîne de caractères sont plus fréquents que les autres - mais avant de pouvoir répondre à la question "comment vérifier l'égalité", vous devez savoir à quoi vous avez affaire.