По-перше, факти:
if (booleanValue)
Буде задовольняти ifоператор за будь-яке значення truthy, booleanValueвключаючи true, будь-яке ненульове число, будь-яке не порожнє значення рядка, будь-яке посилання на об'єкт або масив тощо ...
З іншої сторони:
if (booleanValue === true)
Це задовольнить ifумову лише у тому випадку, коли booleanValueвоно точно дорівнює true. Жодна інша ціннісна цінність її не задовольнить.
З іншого боку, якщо ви це зробите:
if (someVar == true)
Тоді, що Javascript буде робити, це ввести примусовий trueвідповідність типу, someVarа потім порівняти дві змінні. Існує безліч ситуацій, коли це, мабуть, не те, що б хтось мав намір. Через це в більшості випадків ви хочете уникати, ==оскільки існує досить довгий набір правил щодо того, як Javascript буде вводити примушування двох речей одного типу, і якщо ви не розумієте всі ці правила і не зможете передбачити все, що може зробити інтерпретатор JS, коли враховуючи два різні типи (чого більшість розробників JS не може), ймовірно, ви хочете ==повністю уникати .
Як приклад того, як це можна заплутати:
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
Щодо значення 2, ви б подумали, що 2це трихосе значення, тому воно вигідно порівнятиметься true, але це не так, як працює примус типу. Це перетворення значення правої руки у відповідність типу значення лівої руки та перетворення trueїї на число, 1тобто порівняння2 == 1 яке, звичайно, не те, що ви, ймовірно, планували.
Отже, остерігайтеся покупця. Це, мабуть, найкраще уникати ==майже у всіх випадках, якщо ви чітко не знаєте типів, які ви будете порівнювати, і не знаєте, як працюють усі можливі алгоритми примусу типів.
Отже, це дійсно залежить від очікуваних значень booleanValueта того, як ви хочете, щоб код працював. Якщо ви заздалегідь знаєте, що матиме trueабо має falseзначення лише колись , тоді явно порівнюйте його
if (booleanValue === true)
просто зайвий код і непотрібний і
if (booleanValue)
є більш компактним і, можливо, чистішим / кращим.
Якщо, з іншого боку, ви не знаєте, що booleanValueможе бути, і ви хочете перевірити, чи справді це встановлено, якщо trueінші автоматичні перетворення типу не дозволені, тоді
if (booleanValue === true)
це не тільки гарна ідея, але і необхідна.
Наприклад, якщо ви подивитеся на реалізацію .on()в jQuery, вона має необов'язкове повернене значення. Якщо зворотний зв'язок повернеться false, jQuery автоматично зупинить поширення події. В даному конкретному випадку, так як JQuery хоче поширення зупинити тільки , якщо falseбув повернутий, вони перевіряють повертається значення для явної формі, === falseтому що вони не хочуть undefinedабо 0або ""або що - небудь ще , що буде автоматично набирати конвертування в НЕВІРНО задовольняти порівняння.
Наприклад, ось код зворотного виклику події jQuery:
ret = ( specialHandle || handleObj.handler ).apply( matched.elem, args );
if ( ret !== undefined ) {
event.result = ret;
if ( ret === false ) {
event.preventDefault();
event.stopPropagation();
}
}
Ви можете бачити, що jQuery явно шукає ret === false.
Але в коді jQuery також є багато інших місць, де простіша перевірка є доцільною, враховуючи бажання коду. Наприклад:
// The DOM ready check for Internet Explorer
function doScrollCheck() {
if ( jQuery.isReady ) {
return;
}
...