По-перше, факти:
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;
}
...