Prima di tutto, i fatti:
if (booleanValue)
Soddisfarrà l' ifaffermazione per qualsiasi valore di verità di booleanValueinclusione 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 ifcondizione 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 trueper abbinare il tipo di someVare 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 2sia 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 truenel numero, 1quindi sta confrontando 2 == 1che 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 booleanValuee da come si desidera che il codice funzioni. Se sai in anticipo che avrà sempre un valore trueo 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 booleanValuepotrebbe essere e vuoi testare se è veramente impostato su truesenza 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 === falseperché non vogliono undefinedo 0o ""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;
}
...