Mohammad
Mohammad

Reputation: 7418

Perk in evaluation of Boolean variables in JavaScript?

I have this slightly peculiar situation, a boolean statement I have is giving me two different evaluations, in the alert and if operator.

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
}

Upvotes: 1

Views: 84

Answers (1)

Joseph
Joseph

Reputation: 119847

Everything seems to work just fine as long as you use boolean primitives.

But the issue is that you are mixing Boolean objects (homePageHash) with boolean primitives (homePageNonActive and firstTime). The reason why test is "true" is because a "Boolean object false" is "truthy".

Boolean object is not the same as a boolean primitive.

Any object whose value is not undefined or null, including a Boolean object whose value is false, evaluates to true when passed to a conditional statement.

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

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

Upvotes: 1

Related Questions