Во-первых, факты:
if (booleanValue)
Удовлетворяет if
оператору любое истинное значение, 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);
console.log(x == false);
x = 1;
console.log(x == true);
console.log(x == false);
x = 2;
console.log(x == true);
console.log(x == 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, где уместна более простая проверка, учитывая желание кода. Например:
function doScrollCheck() {
if ( jQuery.isReady ) {
return;
}
...