我有这种稍微特殊的情况,我在alert
和if
运算符中给出了两个不同的评估。
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 :(得分:1)
只要您使用布尔基元,所有内容似乎都是work just fine。
但问题在于您将布尔对象(homePageHash
)与布尔基元(homePageNonActive
和firstTime
)混合在一起。 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*/}