Tout d'abord, les faits:
if (booleanValue)
Satisfaire l' ifinstruction pour toute valeur de vérité d' booleanValueinclusion 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 ifcondition que si booleanValueest 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 truepour 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 2s'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 trueen nombre 1afin de comparer 2 == 1ce 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 booleanValueet de la façon dont vous voulez que le code fonctionne. Si vous savez à l'avance qu'il n'aura jamais qu'une valeur trueou 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 booleanValuepourrait être et que vous souhaitez tester s'il est vraiment défini sur truesans 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 === falseparce qu'ils ne veulent pas undefinedou 0ou ""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;
}
...