Po pierwsze, fakty:
if (booleanValue)
Zaspokoi ifoświadczenie o dowolnej wartości truthy z booleanValuetym true, każda niezerowa liczba, każdy niepusty ciąg znaków, dowolny obiekt lub tablica referencyjna, itd ...
Z drugiej strony:
if (booleanValue === true)
Spowoduje to spełnienie ifwarunku tylko wtedy, gdy booleanValuejest dokładnie równe true. Żadna inna prawdziwa wartość tego nie zadowoli.
Z drugiej strony, jeśli to zrobisz:
if (someVar == true)
Następnie JavaScript wykona wpisanie przymusu, trueaby dopasować typ, someVara następnie porównać dwie zmienne. Jest wiele sytuacji, w których prawdopodobnie nie jest to zamierzone. Z tego powodu w większości przypadków chcesz tego uniknąć, ==ponieważ istnieje dość długi zestaw reguł dotyczących tego, w jaki sposób JavaScript wymusza dwie rzeczy, aby były tego samego typu, chyba że rozumiesz wszystkie te zasady i możesz przewidzieć wszystko, co interpreter JS może zrobić, gdy biorąc pod uwagę dwa różne typy (których większość programistów JS nie potrafi), prawdopodobnie chcesz ==całkowicie uniknąć .
Jako przykład tego, jak zagmatwany może być:
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
Jeśli chodzi o wartość 2, można by pomyśleć, że 2jest to prawdziwa wartość, więc można by ją porównać korzystnie true, ale nie tak działa wymuszanie typu. Konwertuje wartość prawej ręki, aby dopasować typ wartości lewej ręki, więc konwertuje trueją na liczbę, 1więc porównuje, 2 == 1co z pewnością nie jest tym, co prawdopodobnie zamierzałeś.
Więc strzeż się kupującego. Prawdopodobnie najlepiej jest tego unikać ==w prawie wszystkich przypadkach, chyba że dokładnie znasz typy, które będziesz porównywać, i wiesz, jak działają wszystkie możliwe algorytmy wymuszania typów.
Tak więc naprawdę zależy to od oczekiwanych wartości booleanValuei sposobu działania kodu. Jeśli wiesz z góry, że będzie miał tylko wartość a truelub false, porównaj ją jawnie z
if (booleanValue === true)
to tylko dodatkowy kod i niepotrzebne i
if (booleanValue)
jest bardziej kompaktowy i prawdopodobnie czystszy / lepszy.
Jeśli z drugiej strony nie wiesz, co booleanValuemoże być i chcesz sprawdzić, czy jest naprawdę ustawiona na truebez innych automatycznych konwersji typów, to
if (booleanValue === true)
to nie tylko dobry pomysł, ale wymagany.
Na przykład, jeśli spojrzysz na implementację .on()w jQuery, ma ona opcjonalną wartość zwracaną. Jeśli wywołanie zwrotne powróci false, jQuery automatycznie zatrzyma propagację zdarzenia. W tym konkretnym przypadku, ponieważ jQuery chce propagacji zatrzymują się tylko jeśli falsezostał zwrócony, sprawdzić ich wartość zwracana explicity za === falsebo nie chcą undefinedlub 0lub ""lub cokolwiek innego, co spowoduje automatyczne typu nawróconego false aby również spełniać porównanie.
Na przykład, oto kod wywołania zwrotnego obsługi zdarzenia jQuery:
ret = ( specialHandle || handleObj.handler ).apply( matched.elem, args );
if ( ret !== undefined ) {
event.result = ret;
if ( ret === false ) {
event.preventDefault();
event.stopPropagation();
}
}
Widać, że jQuery wprost szuka ret === false.
Ale jest też wiele innych miejsc w kodzie jQuery, w których prostsze sprawdzenie jest właściwe, biorąc pod uwagę pożądany kod. Na przykład:
// The DOM ready check for Internet Explorer
function doScrollCheck() {
if ( jQuery.isReady ) {
return;
}
...