2010-01-25 4 views
17

Comme Which equals operator (== vs ===) should be used in JavaScript comparisons? indique qu'ils sont fondamentalement identiques, sauf que '===' assure également l'égalité des types et donc '==' peut effectuer une conversion de type. Dans JavaScript de Douglas Crockford: Les bonnes parties, il est conseillé d'éviter toujours '=='. Cependant, je me demande ce que la pensée originale de concevoir deux ensembles d'opérateurs d'égalité était.Quand JavaScript == aurait-il plus de sens que ===?

Avez-vous constaté que l'utilisation de '==' est plus appropriée que d'utiliser '==='?

Répondre

17

Considérons une situation où l'on compare des chiffres ou des chaînes:

if (4 === 4) 
{ 
    // true 
} 

mais

if (4 == "4") 
{ 
    // true 
} 

une nd

if (4 === "4") 
{ 
    // false 
} 

Ceci s'applique aux objets ainsi qu'aux tableaux.

Donc, dans les cas ci-dessus, vous devez faire un choix judicieux si vous souhaitez utiliser == === ou

+0

Je ne demande pas la différence entre les deux, ce qui est répondu en 359494. Je suis intéressé de savoir quand '==' serait particulièrement approprié. – bryantsai

+5

@bryantsai: Il vous a donné ça - comparer des chaînes à des nombres sans utiliser manuellement 'parseInt'. – Anonymous

+0

mm .. n'a pas vraiment repéré ça, merci. – bryantsai

0

== compare si la valeur des deux côtés est la même ou non.

=== compare si la valeur et le type de données des deux côtés sont identiques ou non.

Disons que nous avons

$var = 0; 

if($var == false){ 
    // true because 0 is also read as false 
} 

if(!$var){ 
    // true because 0 is also read as false 
} 

if($var === false){ 
    // false because 0 is not the same datatype as false. (int vs bool) 
} 

if($var !== false){ 
    // true becuase 0 is not the same datatype as false. (int vs bool) 
} 

if($var === 0){ 
    // true, the value and datatype are the same. 
} 

vous pouvez vérifier http://www.jonlee.ca/the-triple-equals-in-php/

+3

-1 Il s'agit de JavaScript et non de PHP. – Gumbo

3

Je dirais qu'il n'y a pas de problème avec l'utilisation ==, mais de comprendre quand et pourquoi l'utiliser (c'est-à-dire utiliser === en règle générale, et == lorsqu'il sert un but). Essentiellement, == vous donne juste la notation abrégée - (! Vble) au lieu de faire quelque chose comme

if (vble === 0 || vble === "" || vble === null || vble === undefined || vble === false) ... 

Il est beaucoup plus facile d'écrire juste

if (vble == false) ... 

(Ou encore plus facile à écrire)

si ...

Bien sûr, il y a plus d'exemples que la simple recherche de valeurs "truthy" ou "falsey".

Vraiment, vous avez juste besoin de comprendre quand et pourquoi utiliser == et ===, je ne vois aucune raison pourquoi ne pas utiliser == où il convient le mieux ...

Un autre exemple utilise cette raccourci pour autoriser les appels méthode abrégée:

function func(boolOptionNotCommonlyUsed) { 
    if (boolOptionNotCommonlyUsed) { //equiv to boolOptionNotCommonlyUsed == true 
    //do something we rarely do 
    } 
    //do whatever func usually does 
} 

func(); //we rarely use boolOptionNotCommonlyUsed, so allow calling without "false" as an arg 
5

La réponse est simple: « == » a plus de sens que « === » quand vous voulez la contrainte de type à se produire au cours des comparaisons.

Un bon exemple serait le passage de nombres dans une chaîne de requête d'URL. Si, par exemple, vous avez un contenu paginé et que le paramètre de requête page contient le numéro de la page en cours, vous pouvez vérifier la page en cours avec if (page == 1) ... même si page correspond à , et non à 1.

Questions connexes