まず、事実:
if (booleanValue)
を含む真の値、ゼロ以外の数値、空でない文字列値、オブジェクトまたは配列参照などのif
ステートメントを満たします...booleanValue
true
一方で:
if (booleanValue === true)
これは、が と正確に等しいif
場合にのみ条件を満たします。それを満足させる真の値は他にありません。booleanValue
true
一方、これを行う場合:
if (someVar == true)
次に、Javascript が行うのは、型を強制true
して の型を一致させsomeVar
、2 つの変数を比較することです。これが意図したものではない可能性が高い状況がたくさんあります。==
このため、ほとんどの場合、Javascript が 2 つのものを同じ型に強制する方法についてかなり長い一連の規則があり、これらすべての規則を理解し、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
value の場合、それは真の値である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 はイベントの伝播を自動的に停止します。この特定のケースでは、jQueryfalse
は が返された場合にのみ伝播を停止したいので、戻り値を明示的にチェックします。これは、比較を満たすために 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;
}
...