Prima di tutto, i fatti:
if (booleanValue)
Soddisfarrà l' if
affermazione per qualsiasi valore di verità di booleanValue
inclusione true
, qualsiasi numero diverso da zero, qualsiasi valore di stringa non vuoto, qualsiasi riferimento a oggetto o array, ecc ...
D'altro canto:
if (booleanValue === true)
Ciò soddisferà la if
condizione solo se booleanValue
è esattamente uguale a true
. Nessun altro valore di verità lo soddisferà.
D'altra parte se lo fai:
if (someVar == true)
Quindi, ciò che Javascript farà è digitare coerce true
per abbinare il tipo di someVar
e quindi confrontare le due variabili. Ci sono molte situazioni in cui questo non è probabilmente ciò che si vorrebbe. Per questo ==
motivo , nella maggior parte dei casi si desidera evitare perché esiste un insieme abbastanza lungo di regole su come Javascript digita forzare due cose per essere dello stesso tipo e, a meno che non si capiscano tutte quelle regole e si possa anticipare tutto ciò che l'interprete JS potrebbe fare quando dati due tipi diversi (che la maggior parte degli sviluppatori JS non possono), probabilmente vorrai evitare del ==
tutto.
Come esempio di quanto possa essere confuso:
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
Per quanto riguarda il valore 2
, potresti pensare che 2
sia un valore veritiero in modo da confrontarlo favorevolmente true
, ma non è così che funziona la coercizione del tipo. Sta convertendo il valore della mano destra in modo che corrisponda al tipo del valore della mano sinistra, quindi si sta convertendo true
nel numero, 1
quindi sta confrontando 2 == 1
che non è certamente quello che probabilmente intendevi.
Quindi, il compratore sta attento. È probabilmente meglio evitarlo ==
in quasi tutti i casi a meno che tu non conosca esplicitamente i tipi che confronterai e saprai come funzionano tutti i possibili algoritmi di coercizione dei tipi.
Quindi, dipende davvero dai valori previsti booleanValue
e da come si desidera che il codice funzioni. Se sai in anticipo che avrà sempre un valore true
o false
, confrontandolo esplicitamente con
if (booleanValue === true)
è solo un codice extra e non necessario e
if (booleanValue)
è più compatto e probabilmente più pulito / migliore.
Se, d'altra parte, non sai cosa booleanValue
potrebbe essere e vuoi testare se è veramente impostato su true
senza altre conversioni di tipo automatiche consentite, allora
if (booleanValue === true)
non è solo una buona idea, ma necessaria.
Ad esempio, se si guarda all'implementazione di .on()
in jQuery, ha un valore di ritorno opzionale. Se il callback ritorna false
, jQuery interromperà automaticamente la propagazione dell'evento. In questo caso specifico, dal momento che jQuery vuole SOLO propagazione fermarsi se false
è stato restituito, controllano l'esplicitamente valore restituito per === false
perché non vogliono undefined
o 0
o ""
o qualsiasi altra cosa che verrà automaticamente digitare-convert false per soddisfare anche il confronto.
Ad esempio, ecco l'evento jQuery che gestisce il codice di richiamata:
ret = ( specialHandle || handleObj.handler ).apply( matched.elem, args );
if ( ret !== undefined ) {
event.result = ret;
if ( ret === false ) {
event.preventDefault();
event.stopPropagation();
}
}
Puoi vedere che jQuery sta cercando esplicitamente ret === false
.
Ma ci sono anche molti altri posti nel codice jQuery in cui un controllo più semplice è appropriato dato il desiderio del codice. Per esempio:
// The DOM ready check for Internet Explorer
function doScrollCheck() {
if ( jQuery.isReady ) {
return;
}
...