Tout d'abord, les faits:
if (booleanValue)
Satisfaire l' if
instruction pour toute valeur de vérité d' booleanValue
inclusion true
, tout nombre non nul, toute valeur de chaîne non vide, toute référence d'objet ou de tableau, etc.
D'autre part:
if (booleanValue === true)
Cela ne satisfera la if
condition que si booleanValue
est exactement égal à true
. Aucune autre valeur de vérité ne le satisfera.
D'un autre côté, si vous faites ceci:
if (someVar == true)
Ensuite, ce que Javascript fera est de taper coerce true
pour correspondre au type de someVar
, puis de comparer les deux variables. Il existe de nombreuses situations où ce n'est probablement pas ce que l'on aurait voulu. Pour cette raison, dans la plupart des cas, vous voulez éviter ==
car il existe un ensemble assez long de règles sur la façon dont Javascript va taper forcer deux choses à être du même type et à moins que vous ne compreniez toutes ces règles et que vous puissiez anticiper tout ce que l'interpréteur JS pourrait faire quand étant donné deux types différents (que la plupart des développeurs JS ne peuvent pas), vous voudrez probablement éviter ==
complètement.
Pour illustrer à quel point cela peut être déroutant:
var x;
x = 0;
console.log(x == true); // false, as expected
console.log(x == false); // true as expected
x = 1;
console.log(x == true); // true, as expected
console.log(x == false); // false as expected
x = 2;
console.log(x == true); // false, ??
console.log(x == false); // false
Pour la valeur 2
, vous penseriez qu'il 2
s'agit d'une valeur de vérité, donc elle se comparerait favorablement à true
, mais ce n'est pas ainsi que fonctionne la coercition de type. Il convertit la valeur de la main droite pour qu'elle corresponde au type de la valeur de la main gauche afin de la convertir true
en nombre 1
afin de comparer 2 == 1
ce qui n'est certainement pas ce que vous vouliez probablement.
Alors, méfiez-vous de l'acheteur. Il est probablement préférable d'éviter ==
dans presque tous les cas, à moins que vous ne connaissiez explicitement les types que vous comparerez et que vous sachiez comment fonctionnent tous les algorithmes de coercition de types possibles.
Donc, cela dépend vraiment des valeurs attendues pour booleanValue
et de la façon dont vous voulez que le code fonctionne. Si vous savez à l'avance qu'il n'aura jamais qu'une valeur true
ou false
, comparez-le explicitement avec
if (booleanValue === true)
est juste un code supplémentaire et inutile et
if (booleanValue)
est plus compact et sans doute plus propre / meilleur.
Si, en revanche, vous ne savez pas ce que cela booleanValue
pourrait être et que vous souhaitez tester s'il est vraiment défini sur true
sans aucune autre conversion automatique de type autorisée, alors
if (booleanValue === true)
n'est pas seulement une bonne idée, mais obligatoire.
Par exemple, si vous regardez l'implémentation de .on()
dans jQuery, il a une valeur de retour facultative. Si le rappel revient false
, jQuery arrêtera automatiquement la propagation de l'événement. Dans ce cas précis, puisque jQuery veut arrêter SEULEMENT la propagation s'il a false
été renvoyé, ils vérifient la valeur de retour explicite === false
parce qu'ils ne veulent pas undefined
ou 0
ou ""
ou quoi que ce soit d'autre qui sera automatiquement converti en faux pour satisfaire également la comparaison.
Par exemple, voici le code de rappel de gestion des événements jQuery:
ret = ( specialHandle || handleObj.handler ).apply( matched.elem, args );
if ( ret !== undefined ) {
event.result = ret;
if ( ret === false ) {
event.preventDefault();
event.stopPropagation();
}
}
Vous pouvez voir que jQuery recherche explicitement ret === false
.
Mais, il y a aussi de nombreux autres endroits dans le code jQuery où une vérification plus simple est appropriée étant donné le désir du code. Par exemple:
// The DOM ready check for Internet Explorer
function doScrollCheck() {
if ( jQuery.isReady ) {
return;
}
...