En primer lugar, los hechos:
if (booleanValue)
Satisfacerá la ifdeclaración para cualquier valor verdadero de booleanValueincluir true, cualquier número que no sea cero, cualquier valor de cadena no vacío, cualquier referencia de objeto o matriz, etc.
Por otra parte:
if (booleanValue === true)
Esto solo satisfará la ifcondición si booleanValuees exactamente igual a true. Ningún otro valor de verdad lo satisfará.
Por otro lado, si haces esto:
if (someVar == true)
Entonces, lo que hará Javascript es escribir coacción true para que coincida con el tipo de someVary luego comparar las dos variables. Hay muchas situaciones en las que esto probablemente no sea lo que uno pretendería. Debido a esto, en la mayoría de los casos desea evitarlo ==porque hay un conjunto bastante largo de reglas sobre cómo JavaScript escribirá para obligar a dos cosas a ser del mismo tipo y, a menos que comprenda todas esas reglas y pueda anticipar todo lo que el intérprete de JS podría hacer cuando dados dos tipos diferentes (que la mayoría de los desarrolladores de JS no pueden), probablemente desee evitar por ==completo.
Como ejemplo de lo confuso que puede ser:
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
Por el valor 2, pensaría que 2es un valor verdadero, por lo que se compararía favorablemente true, pero no es así como funciona la coerción de tipo. Está convirtiendo el valor de la mano derecha para que coincida con el tipo del valor de la mano izquierda, por lo que su conversióntrue en el número 1para que esté comparando, lo 2 == 1que ciertamente no es lo que probablemente pretendía.
Entonces, comprador tenga cuidado. Es probable que sea mejor evitar== en casi todos los casos, a menos que conozca explícitamente los tipos que comparará y sepa cómo funcionan todos los algoritmos de coerción de tipos posibles.
Por lo tanto, realmente depende de los valores esperados booleanValuey de cómo desea que funcione el código. Si sabe de antemano que solo tendrá una trueofalse valor , entonces compárelo explícitamente con
if (booleanValue === true)
es solo código extra e innecesario y
if (booleanValue)
es más compacto y posiblemente más limpio / mejor.
Si, por otro lado, no sabe qué booleanValuepodría ser y desea probar si realmente está configurado truesin otras conversiones de tipo automáticas permitidas, entonces
if (booleanValue === true)
No solo es una buena idea, sino que se requiere.
Por ejemplo, si observa la implementación de .on()jQuery, tiene un valor de retorno opcional. Si vuelve la devolución de llamada false, jQuery detendrá automáticamente la propagación del evento. En este caso específico, ya que jQuery quiere propagación parada sólo si falsefue devuelto, comprueban el valor de retorno para explícitamente === falseporque no quieren undefinedo 0o ""o cualquier otra cosa que se escriba automáticamente-convertir en false para satisfacer también la comparación.
Por ejemplo, aquí está el código de devolución de llamada de manejo de eventos jQuery:
ret = ( specialHandle || handleObj.handler ).apply( matched.elem, args );
if ( ret !== undefined ) {
event.result = ret;
if ( ret === false ) {
event.preventDefault();
event.stopPropagation();
}
}
Puedes ver que jQuery está buscando explícitamente ret === false .
Pero, también hay muchos otros lugares en el código jQuery donde una verificación más simple es apropiada dado el deseo del código. Por ejemplo:
// The DOM ready check for Internet Explorer
function doScrollCheck() {
if ( jQuery.isReady ) {
return;
}
...