Во-первых, факты:
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;
}
...