2012-05-13 8 views
1

私はこのわずかな特異な状況を抱えています。私は、alertifオペレータに2つの異なる評価を与えています。JavaScriptでブール変数を評価する際のPerk?

var test = new Boolean(homePageNonActive && ((firstTime && homePageHash) || (!firstTime && !homePageHash))); 
alert(homePageNonActive && ((firstTime && homePageHash) || (!firstTime && !homePageHash))); // GIVES ME FALSE 
alert(test); // GIVES ME TRUE ??? WHY? 

if(test){ 
    alert(homePageNonActive); // GIVES ME TRUE 
    alert(firstTime); // GIVES ME TRUE 
    alert(homePageHash); // GIVES ME FALSE 
} 
+0

いいえ、私たちはブール 'VAR homePageNonActive = homePageTarget.hasClass( "非アクティブ・ペイン")として定義されていなかったものを持っている;' ' – Mohammad

+0

するvar homePageHash =新しいブール(window.location.hash また、 'var firstTime = true;' しかし、これらは両方ともブール値 – Mohammad

+0

[ここで動作するようです](http:// jsfiddle。 net/Tkhy4 /)を返します。変数に何か他のものが混在している必要があります。 – Joseph

答えて

1

booleanプリミティブを使用している限り、すべてがwork just fineと思われます。

しかし、ブール型オブジェクト(homePageHash)とブール型プリミティブ(homePageNonActiveおよびfirstTime)を混在させることが問題です。 testが「真」であるのは、「ブールオブジェクトfalse」が「真実」であるためです。

Boolean object is not the same as a boolean primitive.

値が、値がfalseで、条件文に渡されたときにtrueと評価されたBooleanオブジェクトを含め、未定義またはnullでない任意のオブジェクト。

var x = new Boolean(false), 
    y = false; 

if (x) {/*this code is executed*/} 
if (y) {/*this code is NOT executed*/} 
+0

本当にありがとう、私の理解は、基本的なブール変数を明らかに間違っていた! – Mohammad