1

alert我有这种稍微奇怪的情况,我有一个布尔语句在and运算符中给了我两个不同的评估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
}
4

1 回答 1

1

只要您使用布尔基元,一切似乎都可以正常工作。

但问题是您将布尔对象 ( homePageHash) 与布尔基元 (homePageNonActivefirstTime) 混合在一起。之所以test为“真”,是因为“布尔对象为假”是“真”。

布尔对象与布尔基元不同。

任何值不是 undefined 或 null 的对象,包括值为 false 的布尔对象,在传递给条件语句时评估为 true。

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

if (x) {/*this code is executed*/}
if (y) {/*this code is NOT executed*/} 
于 2012-05-13T11:53:25.697 回答