まず、事実:
if (booleanValue)
if
をbooleanValue
含むという真実の値、true
ゼロ以外の数値、空でない文字列値、オブジェクトまたは配列参照などについてステートメントを満たします...
一方:
if (booleanValue === true)
これはif
、booleanValue
がと完全に等しい場合にのみ条件を満たしtrue
ます。他の真実の値はそれを満たしません。
一方、これを行うと:
if (someVar == true)
次に、Javascriptが行うことは、型の型true
に一致するように型強制しsomeVar
、2つの変数を比較することです。これがおそらく意図したものとは異なる状況がたくさんあります。このため、ほとんどの場合、==
JavaScriptが型を強制的に入力する方法に関するかなり長い規則のセットが同じ型になるようにして、それらの規則をすべて理解し、JSインタープリターが実行する可能性があるすべてのことを予測できない場合は、回避する必要があります。 2つの異なるタイプ(ほとんどの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
orのfalse
値のみが存在することが事前にわかっている場合は、それを明示的に比較します
if (booleanValue === true)
余分なコードであり、不要であり、
if (booleanValue)
よりコンパクトで、間違いなくよりクリーンで優れています。
一方、何booleanValue
が起きているのかわからずtrue
、他の自動型変換を許可せずに本当に設定されているかどうかをテストしたい場合は、
if (booleanValue === true)
良いアイデアであるだけでなく、必須です。
たとえば.on()
、jQueryのの実装を見ると、オプションの戻り値があります。コールバックがを返す場合、false
jQueryは自動的にイベントの伝播を停止します。場合はjQueryのONLY停止伝播したいので、この特定のケースでは、false
返された、彼らは、戻り値の明示をチェックし=== false
、彼らはしたくないので、undefined
または0
または""
または何か他のものも自動的にfalseにコンバートを入力します比較を満たします。
たとえば、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;
}
...