在评估JavaScript中的布尔变量时Perk?

时间:2012-05-13 11:37:09

标签: javascript boolean

我有这种稍微特殊的情况,我在alertif运算符中给出了两个不同的评估。

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
}

1 个答案:

答案 0 :(得分:1)

只要您使用布尔基元,所有内容似乎都是work just fine

但问题在于您将布尔对象(homePageHash)与布尔基元(homePageNonActivefirstTime)混合在一起。 test为“true”的原因是因为“布尔对象false”是“真实的”。

  

Boolean object is not the same as a boolean primitive.

     

任何值未定义或为null的对象(包括值为false的Boolean对象)在传递给条件语句时计算结果为true。

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

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